写点什么

h5 逐步实现 <<canvas 系统>>(html 逻辑 css 逻辑 js 逻辑)

发布于: 2021 年 03 月 22 日
h5逐步实现 <<canvas系统>>(html逻辑 css逻辑  js逻辑)


<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8">	<meta name="viewport" content="width=device-width, initial-scale=1.0">	<title>Document</title>	<style type="text/css">		*{padding: 0px;margin: 0px;}		body		{			overflow: hidden;		}	</style></head><body>	<canvas id="draw" ></canvas>	<script type="text/javascript">		//获取canvas.		const canvas=document.querySelector("#draw");		if(canvas.getContext)		{			var ctx=canvas.getContext("2d");			console.log("支持666");		}		else		{			console.log("不支持");		}		/*支持就执行余下的语句能够用起来,不支持的话,页面上会什么效果都没有。*/		canvas.width=window.innerWidth;		canvas.height=window.innerHeight;		ctx.lineWidth=90;//线条的颜色.		ctx.lineCap="round";/*线条结束时的形状*/		ctx.lineJoin="round";/*当两条线条相交时.*/		ctx.strokeStyle="red";		let isDrawing=false;//还没开始画		let x=0;let y=0;		let lastX = 0;    	let lastY = 0;    	let hue = 0;    	let direction = true;		function draw(e)		{			if(!isDrawing)			{				return;			}
x=e.offsetX;//获取移动后停下的坐标点. y=e.offsetY;//获取移动后停下的坐标点. //彩虹效 ctx.strokeStyle=`hsl(${hue},90%,50%)`; if(hue>360)hue=0; hue++; // 控制笔触大小 if(ctx.lineWidth>120||ctx.lineWidth<10) { direction=!direction; } if(direction) { ctx.lineWidth++; } else { ctx.lineWidth--; } /*这段思路时:开始direction = true,++到大于120就direction=!direction;,为false,就else--到小于10时就 direction=!direction;,true,就++至此循环.*/ ctx.beginPath(); ctx.moveTo(lastX,lastY);//开始画了 ctx.lineTo(x,y); ctx.stroke(); [lastX,lastY]=[x,y] } canvas.addEventListener('mousedown',e=> { isDrawing=true;//开始画. [lastX,lastY]=[e.offsetX,e.offsetY];//获取按下的开始xy坐标点 }); canvas.addEventListener("mousemove",draw); canvas.addEventListener('mouseup',()=>isDrawing=false);//这两个都false canvas.addEventListener('mouseout',()=>isDrawing=false); </script></body></html>
复制代码



第一:写一个canvas对象,用canvas来做.
```javascript<canvas id="draw" ></canvas>
复制代码

注意一下:它默认宽 300 高 150。


<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8">	<meta name="viewport" content="width=device-width, initial-scale=1.0">	<title>Document</title>	</head><body>	<canvas id="canvas"></canvas>	<script type="text/javascript">		console.log(canvas.offsetWidth,canvas.offsetHeight);	</script></body></html>
复制代码



第二·:判断所用的浏览器是否支持 canvas.


const canvas=document.querySelector("#draw");		if(canvas.getContext)		{			var ctx=canvas.getContext("2d");			console.log("支持666");		}		else		{			console.log("不支持");		}
复制代码



第三:让 canvas 绘图可以画整个 body.并且要设置线条的宽度+线条结束时候的形状+两天线条相交时的形状.+线条的颜色.


canvas.width=window.innerWidth;		canvas.height=window.innerHeight;		ctx.lineWidth=90;		ctx.lineCap="round";		ctx.lineJoin="round";		ctx.strokeStyle="red";
复制代码


第四;当点击 body 某一处的时候就开始作画.然后是获取按下去时候的 xy 坐标点.


canvas.addEventListener('mousedown',e=>		{			isDrawing=true;			[lastX,lastY]=[e.offsetX,e.offsetY];		});
复制代码


第五:移动的时候触发 draw 函数,


canvas.addEventListener("mousemove",draw);
复制代码

第六:记录移动完毕后的 xy 坐标.


x=e.offsetX;y=e.offsetY;
复制代码


第七;多姿多彩的效果:


ctx.strokeStyle=`hsl(${hue},90%,50%)`;			if(hue>360)hue=0;			hue++;
复制代码


第八:控制笔触的宽.(口诀;太大了就小,太小了就大)


if(ctx.lineWidth>120||ctx.lineWidth<10)			{				direction=!direction;			}			if(direction)			{				ctx.lineWidth++;			}			else			{				ctx.lineWidth--;			}
复制代码


第九:开始绘制

ctx.beginPath();			ctx.moveTo(lastX,lastY);			ctx.lineTo(x,y);			ctx.stroke();			[lastX,lastY]=[x,y]//核心
复制代码


注意一下·;lastx 与 lasty 是 down 的时候的 xy 坐标,x,y 是 move 完毕后的坐标.

有一个问题


第十:怎么办?[lastX,lastY]=[x,y]

就行了,代表按下了一直移动能够完美续接.

不然的话,会按下然后移动会像上面的图一样。

这里解决了上面的图片的问题.


发布于: 2021 年 03 月 22 日阅读数: 16
用户头像

不成就忍耐到成。我没有什么本事,只会忍耐 2020.10.03 加入

还未添加个人简介

评论

发布
暂无评论
h5逐步实现 <<canvas系统>>(html逻辑 css逻辑  js逻辑)