1. canvas自身是带的有width 和height的,写在标签属性style里面和外面是不一样的
2. 在进行canvas路径操作的时候,一定要先清除前面的路径(obj.beginPath()),否则前面的路径会受到后面的影响。
3. obj.beginPath()和obj.closePath()两个没有关系,obj.beginPath()清除之前的路径;obj.closePath()闭合当前路径
4. canvas画线操作:moveTo()、lineTo()、beginPath()、closePath()、stroke()、fill()
5. canvas画矩形操作:rect()、strokeRect()、fillRect()、clearRect()
6. canvas 做自适应可以用window.onresize
7. canvas 的描边扩展的时候既向内又向外扩展
8. canvas不会保存图形,所以图形画了就不能修改,如果要修改,只能删了重画;canvas画的图形没有事件,canvas对象本身有事件
canvas里的图形向右移动实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
background: gray;
text-align: center;
}
</style>
<script>
window.onload = function () {
let c1 = document.getElementsByTagName('canvas')[0];
let left=100;
let gd = c1.getContext('2d');
requestAnimationFrame(next);
function next(){
gd.clearRect(0,0,c1.width,c1.height);
left+=5;
gd.strokeRect(left,100,200,200);
requestAnimationFrame(next);
}
}
</script>
</head>
<body>
<canvas width="800" height="600" style="background:white;"></canvas>
</body>
</html>
这段代码是在canvas里有一个不断向右移动的矩形。
requestAnimationFrame函数是请求一个动画帧
canvas里鼠标移入移出矩形变色实例:
还是上面的canvas,js代码如下
window.onload = function () {
let c1 = document.getElementsByTagName('canvas')[0];
let gd = c1.getContext('2d');
gd.strokeRect(100,100,200,200);
c1.onmousemove=function(ev){
let l=100,r=l+200,t=100,b=t+200;
let x=ev.offsetX,y=ev.offsetY;
//let x=ev.clientX-c1.offsetLeft,y=ev.clientY-c1.offsetTop;
//这里的鼠标坐标x,y可以有两种写法
gd.clearRect(0,0,c1.width,c1.height);
if(x>=l&&x<=r&&y>=t&&y<=b){
gd.strokeStyle='red';
}else{
gd.strokeStyle='black';
}
gd.strokeRect(100,100,200,200);
}
}
9. canvas画圆操作arc(cx,cy,r,startAng,endAng,false),cx、cy表示圆心坐标,r表示半径,startAng、endAng表示起始角度和结束角度(弧度制),最后一个参数false表示是否逆时针。
canvas里鼠标移入移出圆形变色实例:
原理:如何判断鼠标是否在圆内?只要判断鼠标到圆心的距离是否大于半径,就可以检测是否在圆内
还是上面的canvas,js代码如下
window.onload = function () {
let c1 = document.getElementsByTagName('canvas')[0];
let gd = c1.getContext('2d');
let cx=200,cy=200,r=150;
function d2a(n){//角度转弧度
return n*Math.PI/180;
}
function a2d(n){//弧度转角度
return n*180/Math.PI;
}
gd.arc(cx,cy,r,d2a(0),d2a(360),false);
gd.stroke();
c1.onmousemove=function(ev){
let x=ev.offsetX,y=ev.offsetY;//鼠标到画布的距离,左上
let dis=Math.sqrt(Math.pow(x-cx,2)+Math.pow(y-cy,2));//鼠标到圆心的距离
gd.clearRect(0,0,c1.width,c1.height);
if(dis<=r){//如果鼠标到圆心的距离小于半径,说明在圆内
gd.strokeStyle='red';
}
else{//否则在圆外
gd.strokeStyle='black';
}
gd.beginPath();
gd.arc(cx,cy,r,d2a(0),d2a(360),false);
gd.stroke();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。