当前位置:网站首页>canvas基础1 - 画直线(通俗易懂)
canvas基础1 - 画直线(通俗易懂)
2022-07-06 09:21:00 【玲小叮当】
系列文章目录
本文开始是canvas,通俗易懂,小白也没烦恼,根据慕课网liuyubobobo老师的视频课学习整理
视频课指路:慕课网 liuyubobobo老师 炫丽的倒计时效果Canvas绘图与动画基础
1、声明标签
- 宽高在标签上
<canvas id="canvas" width="1024" height="768" style="background-color: rgb(200,200,200);display: block;margin: 20px auto;" >
当前浏览器不支持canvas,请更换浏览器后再试
</canvas>
- 宽高在js中设置
<canvas id="canvas" style="background-color: rgb(200,200,200);display: block;margin: 20px auto;">
当前浏览器不支持canvas,请更换浏览器后再试
</canvas>
window.onload = function () {
// 获取
var canvas = document.getElementById('canvas')
canvas.width = 1024
canvas.height = 768
// 判断该浏览器是否可以使用canvas
if (canvas.getContext('2d')) {
// 使用2d绘图
var context = canvas.getContext('2d')
// 使用context绘制
} else {
alert('当前浏览器不支持canvas,请更换浏览器后再试')
}
}
2、画一条直线
canvas先设置状态最后绘制
画一条直线js代码
context.moveTo(x, y) 起点
context.lineTo(x, y) 终点
context.lineWidth = 5 线宽
context.strokeStyle = ‘#005588’ 线样式
context.stroke() 绘制
window.onload = function () {
var canvas = document.getElementById('canvas')
canvas.width = 1024
canvas.height = 768
if (canvas.getContext('2d')) {
var context = canvas.getContext('2d')
// 使用context绘制
// 从坐标(100,100)为起点开始
context.moveTo(100, 100)
// 到坐标(700,700)为终点画一条直线
context.lineTo(700, 700)
// 线宽为5
context.lineWidth = 5
// 线的样式颜色
context.strokeStyle = '#005588'
// 执行划直线这个操作
context.stroke()
} else {
alert('当前浏览器不支持canvas,请更换浏览器后再试')
}
}
效果
3、线条组成的图形 - 画一个三角形
window.onload = function () {
var canvas = document.getElementById('canvas')
canvas.width = 1024
canvas.height = 768
if (canvas.getContext('2d')) {
var context = canvas.getContext('2d')
// 使用context绘制
// 从坐标(100,100)为起点开始
context.moveTo(100, 100)
context.lineTo(700, 700)
context.lineTo(100, 700)
context.lineTo(100, 100)
// 线宽为5
context.lineWidth = 5
// 线的样式颜色
context.strokeStyle = '#005588'
// 执行划直线这个操作
context.stroke()
} else {
alert('当前浏览器不支持canvas,请更换浏览器后再试')
}
}
4、多边形填充加描边
- context.fillStyle = ‘rgb(2,100,30)’ 填充的颜色
- context.fill() 填充
window.onload = function () {
var canvas = document.getElementById('canvas')
canvas.width = 1024
canvas.height = 768
if (canvas.getContext('2d')) {
var context = canvas.getContext('2d')
// 使用context绘制
// 从坐标(100,100)为起点开始
context.moveTo(100, 100)
// 到坐标(700,700)为终点画一条直线
context.lineTo(700, 700)
context.lineTo(100, 700)
context.lineTo(100, 100)
// 线宽为5
context.lineWidth = 5
// 线的样式颜色
context.strokeStyle = '#f00'
// 执行划直线这个操作
context.stroke()
// 多边形填充
context.fillStyle = 'rgb(2,100,30)'
context.fill()
} else {
alert('当前浏览器不支持canvas,请更换浏览器后再试')
}
}
5、定义两个形状
- context.beginPath() 起始
- context.closePath() 结束
- 这两个方法将两段路径包裹起来将其与其它路径分隔开
window.onload = function () {
var canvas = document.getElementById('canvas')
canvas.width = 1024
canvas.height = 768
if (canvas.getContext('2d')) {
var context = canvas.getContext('2d')
// 使用context绘制
// 从坐标(100,100)为起点开始
context.beginPath()
context.moveTo(100, 100)
// 到坐标(700,700)为终点画一条直线
context.lineTo(700, 700)
context.lineTo(100, 700)
context.lineTo(100, 100)
context.closePath()
// 线宽为5
context.lineWidth = 5
// 线的样式颜色
context.strokeStyle = '#f00'
// 执行划直线这个操作
context.stroke()
// // 多边形填充
// context.fillStyle = 'rgb(2,100,30)'
// context.fill()
context.beginPath()
context.moveTo(200, 100)
context.lineTo(700, 600)
context.closePath()
context.strokeStyle = '#000'
context.stroke()
} else {
alert('当前浏览器不支持canvas,请更换浏览器后再试')
}
}
6、七巧板demo例子
- html部分
<canvas id="canvas" width="800" height="800" style="background-color: aliceblue;display: block;margin: 10px auto;">
当前浏览器不支持canvas,请更换浏览器后再试
</canvas>
- 自造数据部分
var tangram = [
{
p: [{
x: 0,y: 0},{
x: 800,y: 0},{
x: 400,y: 400},],
color: '#caff67'
}, {
p: [{
x: 0,y: 0},{
x: 400,y: 400},{
x: 0,y: 800},],
color: '#67becf'
}, {
p: [{
x: 0,y: 800},{
x: 400,y: 400},{
x: 400,y: 800},],
color: '#f50'
}, {
p: [{
x: 400,y: 800}, {
x: 800,y: 800}, {
x: 400,y: 400}, ],
color: '#0f5'
}, {
p: [{
x: 400,y: 400}, {
x: 800,y: 0}, {
x: 600,y: 600}, ],
color: '#25f'
}, {
p: [{
x: 800,y: 0}, {
x: 600,y: 600}, {
x: 800,y: 800}, ],
color: '#f33'
},
]
- js部分
let canvas = document.getElementById('canvas')
if (canvas.getContext('2d')) {
var context = canvas.getContext('2d')
tangram.forEach((item, index) => {
draw(item, context)
})
}
function draw(piece, cxt) {
cxt.beginPath()
cxt.moveTo(piece.p[0].x, piece.p[0].y)
piece.p.forEach((item, index) => {
cxt.lineTo(item.x, item.y)
})
cxt.closePath()
cxt.fillStyle = piece.color
cxt.fill()
cxt.lineWidth = 2
cxt.strokeStyle = '#000'
cxt.stroke()
}
7、绘制正方形demo
<canvas id="canvas" width="1024" height="768" style="display: block; background-color: #eee;margin: 10px auto;">
不能使用
canvas
</canvas>
<script> var canvas = document.getElementById('canvas') var context = canvas.getContext('2d') drawRect(context, 100, 100, 400, 400, 10, '#600', '#008833') function drawRect(cxt, x, y, width, height, borderWidth, borderColor, borderFill) {
cxt.beginPath() cxt.moveTo(x, y) cxt.lineTo(x + width, y) cxt.lineTo(x + width, y + height) cxt.lineTo(x + width, y + height) cxt.lineTo(x, y + height) cxt.closePath() cxt.lineWidth = borderWidth cxt.strokeStyle = borderColor cxt.fillStyle = borderFill cxt.fill() cxt.stroke() } </script>
总结
本文问canvas第一节,之后会持续更新,大家感觉还实用的话,关注或者点个赞都可以,谢谢啦
边栏推荐
- 【毕业季·进击的技术er】再见了,我的学生时代
- MySQL中count(*)的实现方式
- Thoroughly understand LRU algorithm - explain 146 questions in detail and eliminate LRU cache in redis
- Pit avoidance Guide: Thirteen characteristics of garbage NFT project
- 【九阳神功】2018复旦大学应用统计真题+解析
- 透彻理解LRU算法——详解力扣146题及Redis中LRU缓存淘汰
- Questions and answers of "signal and system" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
- Service ability of Hongmeng harmonyos learning notes to realize cross end communication
- 3. Number guessing game
- [modern Chinese history] Chapter V test
猜你喜欢
优先队列PriorityQueue (大根堆/小根堆/TopK问题)
(ultra detailed onenet TCP protocol access) arduino+esp8266-01s access to the Internet of things platform, upload real-time data collection /tcp transparent transmission (and how to obtain and write L
View UI plus released version 1.3.0, adding space and $imagepreview components
3.输入和输出函数(printf、scanf、getchar和putchar)
(原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间。显示格式为“时时:分分:秒秒”。设有 4 个功能键k1~k4,功能如下:(1)k1——进入时间修改。
This time, thoroughly understand the MySQL index
Mortal immortal cultivation pointer-1
(original) make an electronic clock with LCD1602 display to display the current time on the LCD. The display format is "hour: minute: Second: second". There are four function keys K1 ~ K4, and the fun
凡人修仙学指针-2
The latest tank battle 2022 full development notes-1
随机推荐
MySQL Database Constraints
FAQs and answers to the imitation Niuke technology blog project (II)
There is always one of the eight computer operations that you can't learn programming
8. C language - bit operator and displacement operator
使用Spacedesk实现局域网内任意设备作为电脑拓展屏
Arduino+ water level sensor +led display + buzzer alarm
1.C语言矩阵加减法
4.二分查找
2022泰迪杯数据挖掘挑战赛C题思路及赛后总结
[hand tearing code] single case mode and producer / consumer mode
抽象类和接口的区别
3. Number guessing game
9.指针(上)
Comparison between FileInputStream and bufferedinputstream
Floating point comparison, CMP, tabulation ideas
FAQs and answers to the imitation Niuke technology blog project (III)
5. Download and use of MSDN
Atomic and nonatomic
透彻理解LRU算法——详解力扣146题及Redis中LRU缓存淘汰
【九阳神功】2016复旦大学应用统计真题+解析