代码拉取完成,页面将自动刷新
canvas的一些基础学习,以及一些小demo
预览:http://richqin.gitee.io/canvas/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas</title>
</head>
<body onload="draw()" style="text-align: center;">
<canvas id="canvas" width="800px" height="400px" style="border:1px solid #000;"></canvas>
<script>
function draw(){
let canvas = document.getElementById("canvas");
if(canvas.getContext){
//创建context对象
let cvsCtx = canvas.getContext("2d");
//fillRect(x,y,w,h)
/* cvsCtx.fillStyle = 'pink';
cvsCtx.fillRect(0, 0, 200, 200); */
//填充颜色
cvsCtx.fillStyle = '#000';
//起始点
cvsCtx.moveTo(0,0);
//画线
cvsCtx.lineTo(100,0);
cvsCtx.lineTo(0,100);
//填充
cvsCtx.fill();
//描边颜色
cvsCtx.strokeStyle = '#000';
cvsCtx.moveTo(10,110);
cvsCtx.lineTo(110,110);
cvsCtx.lineTo(110,110);
cvsCtx.lineTo(110,10);
cvsCtx.lineTo(10,110);
//描边结束
cvsCtx.stroke();
}
}
</script>
</body>
</html>
function draw(){
let canvas = document.getElementById("canvas");
if(canvas.getContext){
//创建contect对象
let cvsCtx = canvas.getContext("2d");
//画圆(圆心x,y,半径,开始角度,结束角度,顺时针false/逆时针true)
cvsCtx.strokeStyle = '#000';
//线宽
//cvsCtx.lineWidth = 10;
//画笑脸
cvsCtx.beginPath();
cvsCtx.arc(400, 200, 150, 0, 2*Math.PI, false);
cvsCtx.moveTo(500, 200);
cvsCtx.arc(400, 200, 100, 0, Math.PI, false);
cvsCtx.closePath();
cvsCtx.moveTo(370, 120);
cvsCtx.arc(350, 120, 20, 0, 2*Math.PI, false);
cvsCtx.moveTo(470, 120);
cvsCtx.arc(450, 120, 20, 0, 2*Math.PI, false);
cvsCtx.stroke();
}
}
//参数1:0-1,表示颜色所在位置
//参数2: 颜色 white #fff #ffffff rgb(255,255,255)
//创建一个线性渐变对象(x,y,w,h)
let grd = cvsCtx.createLinearGradient(0,0,0,200);
//创建径向渐变对象 (x1,y1,r1,x2,y2,r2)
//var rad = cvsCtx.createRadialGradient(120,120,20,120,120,50);
//添加颜色
grd.addColorStop(0,"#000");
grd.addColorStop(0.5,"#ccc");
grd.addColorStop(1,"#fff");
cvsCtx.fillStyle = grd;
cvsCtx.fillRect(0,0,200,200);
//绘制图像
let img=new Image()
img.src="info.png"
//等待图片加载完
img.onload = function(){
//drawImage(img,x,y,width,height,从x开始截取,y,w,h)
cvsCtx.drawImage(this,0,0);
}
//绘制文字
//cvsCtx.font = 'style, weight, size, family';
cvsCtx.font = '160px italic';
//阴影
cvsCtx.shadowColor = '#ccc';
//阴影模糊度,偏移
cvsCtx.shadowBlur = 10;
cvsCtx.shadowOffsetX = 20;
cvsCtx.shadowOffsetY = 20;
//cvsCtx.fillText/strokeText('text', x, y);
cvsCtx.fillText('RichQin', 20, 150);
cvsCtx.globalCompositeOperation = "destination-out";
目标图像:画布已存在图像 destination
源图像:即将画上去的图像 source
保存数据和使用数据
cvsCtx.save();cvsCtx.restore();
使用栈的存取方式,先进后出,先使用最后保存的数据
let x = 0,y = 0,width = 50,height = 50;
cvsCtx.beginPath();
cvsCtx.fillStyle = "pink";
cvsCtx.fillRect(x, y, width, height);
let speedX = 2,speedY = 2;
// 1 请求关键帧动画(自动规划最优动画,不会失帧)
function move(){
//清除画布
cvsCtx.clearRect(x, y, canvas.width, canvas.height);
//更新位置
x += speedX;
if(x > canvas.width-width || x < 0){
speedX *= -1;
}
y += speedY;
if(y > canvas.height-height || y < 0){
speedY *= -1;
}
//绘制图像
cvsCtx.fillRect(x, y, width, height);
//请求关键帧动画
window.requestAnimationFrame(move);
}
move();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。