H5《canvas》标签实现绘画板

先上结果图:

 

 

 注:本项目主要实现了:a、画图;b、清屏;c、橡皮擦;d、保存;e、颜色选择;f、粗细选择;

1.html代码

          <div class="canvas">
			<canvas width="800px" height="500px"></canvas>
		</div>
		<div class="btn_box">
			<button class="brush" >画笔</button>
			<button class="clear" >清屏</button>
			<button class="erase" >橡皮檫</button>
			<button class="save">保存</button>
			<span>颜色:</span><input type="color" class="color" />
			<span>粗细:</span><input type="range" class="range" min="1" max="20" value="1" />
		</div>

2.样式代码

<style>
             *{margin: 0;padding: 0;}
            body{
                display: flex;
                justify-content: center;
                align-items: center;
                width: 100vh;
                height: 100vh;
            }
            .canvas{
                width: 800px;
                height: 500px;
                border: 1px solid #000 ;
                border-radius: 20px;
                box-shadow: 5px 5px 5px #000;
                position: absolute;
                left: 50%;
                top: 50%;
                margin-left: -400px;
                margin-top: -300px;
            }
            .btn_box{
				text-align: center;
                margin: auto;
                position: absolute;
                height: 100px;
                left: 50%;
                top: 50%;
                margin-left: -400px;
                margin-top: 250px;
            
            }
            .btn_box button{
                border: none;
                width: 80px;
                height: 40px;
                border: 1px solid gray;
                border-radius: 20px;
                margin-left: 25px;
            }
        </style>

3.js代码

<script>
window.onload=function(){
	//得到canvas
	var mycanvas =document.querySelector("canvas");
	var ctx=mycanvas.getContext("2d");
	//按钮
	brush=document.querySelector(".brush");//画笔
	rects=document.querySelector(".rect");//矩形
	clear=document.querySelector(".clear");//清屏
	erase=document.querySelector(".erase");//橡皮檫
	retrue=document.querySelector(".retrue");//撤销
	save=document.querySelector(".save");//保存
	color=document.querySelector(".color");//颜色选择
	ranges=document.querySelector(".range");//粗细
	//初始化绘制大小颜色等
	var lineW=1,
	strokeC="#000000",
	fillC="#000000";
	//监听颜色修改与画笔大小修改
	//修改画笔大小
	ranges.onchange=function(){
		lineW=this.value;
	}
	//修改颜色
	color.onchange=function(){
		strokeC=this.value;
		fillC=this.value;
	}
	//画笔(实质改变颜色)
	brush.onclick=function(){
		strokeC=color.value;
	}
	//保存
	save.onclick = function() {
		let url = mycanvas.toDataURL('image/jpg');
		let a = document.createElement('a');//创建一个a标签
		document.body.appendChild(a);
		a.href = url;
		a.download = '草稿纸';//download 属性规定被下载的超链接目标。
		a.target = '_blank';
		a.click()
	};
	//定义判断鼠标是否按下事件
	var flag=false;
	
	//监听canva鼠标按下事件
	var startX=0,startY=0,endX=0,endY=0;
	mycanvas.onmousedown=function(e){
		//得到绘制开始的坐标
		startX=e.layerX;
		startY=e.layerY;
		//设置鼠标已经按下
		flag=true;
	}
	//监听鼠标按下移动
	mycanvas.onmousemove=function(e){
		if(flag){
			//得到移动的坐标
			endX=e.layerX;
			endY=e.layerY;
			//创建路径
			ctx.beginPath();
			//绘制图形
			ctx.moveTo(startX,startY);
			ctx.lineTo(endX,endY);
			//设置线条大小与颜色
			ctx.strokeStyle=strokeC;
			ctx.lineWidth=lineW;
			//设置线两端形状round-圆形线帽,square-正方形线帽。
			ctx.lineCap="round";
			ctx.stroke();
			//关闭路径
			ctx.closePath();
			
			//下一次的开始位置为上一次的结束坐标
			startX=endX;
			startY=endY;
		}
	}
	//监听鼠标松开
	mycanvas.onmouseup=function(){
		flag=false;
	}
	//离开当前区域
	mycanvas.onmouseleave=function(){
		flag=false;
	}
	//清空画布
	clear.onclick=function(){
		ctx.clearRect(0,0,800,500);
	}
	//橡皮擦(实质改变颜色)
	erase.onclick=function(){	 
		strokeC="#ffffff";
	}

}
</script>

4.整体代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>绘画本</title>
        <style>
             *{margin: 0;padding: 0;}
            body{
                display: flex;
                justify-content: center;
                align-items: center;
                width: 100vh;
                height: 100vh;
            }
            .canvas{
                width: 800px;
                height: 500px;
                border: 1px solid #000 ;
                border-radius: 20px;
                box-shadow: 5px 5px 5px #000;
                position: absolute;
                left: 50%;
                top: 50%;
                margin-left: -400px;
                margin-top: -300px;
            }
            .btn_box{
				text-align: center;
                margin: auto;
                position: absolute;
                height: 100px;
                left: 50%;
                top: 50%;
                margin-left: -400px;
                margin-top: 250px;
            
            }
            .btn_box button{
                border: none;
                width: 80px;
                height: 40px;
                border: 1px solid gray;
                border-radius: 20px;
                margin-left: 25px;
            }
        </style>
	</head>
	<body>
		<div class="canvas">
			<canvas width="800px" height="500px"></canvas>
		</div>
		<div class="btn_box">
			<button class="brush" >画笔</button>
			<button class="clear" >清屏</button>
			<button class="erase" >橡皮檫</button>
			<button class="save">保存</button>
			<span>颜色:</span><input type="color" class="color" />
			<span>粗细:</span><input type="range" class="range" min="1" max="20" value="1" />
		</div>
	</body>
</html>
<script>
window.onload=function(){
	//得到canvas
	var mycanvas =document.querySelector("canvas");
	var ctx=mycanvas.getContext("2d");
	//按钮
	brush=document.querySelector(".brush");//画笔
	rects=document.querySelector(".rect");//矩形
	clear=document.querySelector(".clear");//清屏
	erase=document.querySelector(".erase");//橡皮檫
	retrue=document.querySelector(".retrue");//撤销
	save=document.querySelector(".save");//保存
	color=document.querySelector(".color");//颜色选择
	ranges=document.querySelector(".range");//粗细
	//初始化绘制大小颜色等
	var lineW=1,
	strokeC="#000000",
	fillC="#000000";
	//监听颜色修改与画笔大小修改
	//修改画笔大小
	ranges.onchange=function(){
		lineW=this.value;
	}
	//修改颜色
	color.onchange=function(){
		strokeC=this.value;
		fillC=this.value;
	}
	//画笔(实质改变颜色)
	brush.onclick=function(){
		strokeC=color.value;
	}
	//保存
	save.onclick = function() {
		let url = mycanvas.toDataURL('image/jpg');
		let a = document.createElement('a');//创建一个a标签
		document.body.appendChild(a);
		a.href = url;
		a.download = '草稿纸';//download 属性规定被下载的超链接目标。
		a.target = '_blank';
		a.click()
	};
	//定义判断鼠标是否按下事件
	var flag=false;
	
	//监听canva鼠标按下事件
	var startX=0,startY=0,endX=0,endY=0;
	mycanvas.onmousedown=function(e){
		//得到绘制开始的坐标
		startX=e.layerX;
		startY=e.layerY;
		//设置鼠标已经按下
		flag=true;
	}
	//监听鼠标按下移动
	mycanvas.onmousemove=function(e){
		if(flag){
			//得到移动的坐标
			endX=e.layerX;
			endY=e.layerY;
			//创建路径
			ctx.beginPath();
			//绘制图形
			ctx.moveTo(startX,startY);
			ctx.lineTo(endX,endY);
			//设置线条大小与颜色
			ctx.strokeStyle=strokeC;
			ctx.lineWidth=lineW;
			//设置线两端形状round-圆形线帽,square-正方形线帽。
			ctx.lineCap="round";
			ctx.stroke();
			//关闭路径
			ctx.closePath();
			
			//下一次的开始位置为上一次的结束坐标
			startX=endX;
			startY=endY;
		}
	}
	//监听鼠标松开
	mycanvas.onmouseup=function(){
		flag=false;
	}
	//离开当前区域
	mycanvas.onmouseleave=function(){
		flag=false;
	}
	//清空画布
	clear.onclick=function(){
		ctx.clearRect(0,0,800,500);
	}
	//橡皮擦(实质改变颜色)
	erase.onclick=function(){	 
		strokeC="#ffffff";
	}

}
</script>

5.其它

  如果需要实现其它效果详情见canvas的具体API及属性 https://www.runoob.com/tags/ref-canvas.html

posted @ 2021-04-15 11:17  飞渝  阅读(270)  评论(0)    收藏  举报