canvas签名保存

这段代码展示了如何使用HTML5的Canvas元素结合JavaScript实现用户签名的功能。当用户在签名区域内进行鼠标操作时,可以绘制线条,松开鼠标后停止。提供了清除签名和保存签名为base64编码图片的功能,可将数据发送到后台保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<div id="signature" style="display: none;">
	<canvas id="canvas"></canvas>
<!--	<button id="button" >清除画面</button>-->
<!--	<button id="saveButton" >保存</button>-->
</div>
 <button id="saveButton" >打开签名</button>
<script>
	var canvasx=canvas.getBoundingClientRect().left;
	var canvasy=canvas.getBoundingClientRect().top;
	var canvas=document.getElementById("canvas");
	var context=canvas.getContext("2d");
	canvas.width=500;
	canvas.height=400;
	context.fillStyle="rgb(0,0,0)"; // 设置字体颜色
	canvas.addEventListener("mousedown",downfun);
	canvas.addEventListener("mousemove",movefun);
	canvas.addEventListener("mouseup",upfun);
	//canvas.οnmοusedοwn=function(){};
	//canvas.οnmοusedοwn=function(){};
	//canvas.οnmοusedοwn=function(){};
	var startx;   //起始坐标x
	var starty;  //起始坐标y
	var endx;   //结束坐标x
	var endy;   //结束坐标y
	context.lineWidth=3; //设置线宽
	var offon=false;   //锁定开关
	//鼠标按下
	function downfun(e){
	   // 每次开始签名或者在弹出框移动之后都需要重新获取画布的位置
		canvasx=canvas.getBoundingClientRect().left;
		canvasy=canvas.getBoundingClientRect().top;
		offon=true;
		startx=e.clientX-canvasx;
		starty=e.clientY-canvasy;
	}
	//鼠标移动
	function movefun(e){
		if (offon==true){
			context.beginPath();
			endx=e.clientX-canvasx;
			endy=e.clientY-canvasy;
			context.moveTo(startx,starty);
			context.lineTo(endx,endy);
			context.stroke();
			startx=endx;
			starty=endy;
		}
	}
	//鼠标离开
	function upfun(){
		offon=false;
		context.closePath();
	}
	//清除画面
	document.getElementById("button").onclick=function(){
		context.clearRect(0,0,canvas.width,canvas.height);
	}

	document.getElementById("saveButton").onclick = function(){
		saveButton()
	}
	document.getElementById("button").onclick=function(){
	 // 使用layer 弹出
	 layer.open({
		     type: 1, // 1 html元素,2,url地址等。。
			 title:'用户签名',
			 area:['510px', '490px'],
			 closeBtn :1,//右上角的关闭按钮取消0,1
			 resize:false, // 是否拖拉伸缩
			 content: $("#signature"),
			 btn:['保存签名','清空签名','取消'],
			 btn1: function (index,layero) {
				 saveButton()
				 layer.close(index);
			 },
			 btn2: function(index,layero){
				 $("#button").click();
				 var canvas=document.getElementById("canvas");
				 var context=canvas.getContext("2d");
				 context.clearRect(0,0,canvas.width,canvas.height);
				 return false;
			 },
			 end: function(index){
				 $("#signature").hide();
				 layer.close(index);
			 }
		 })
	}
	function saveButton() {
	   // 可以直接使用canvas,但是由于我真实环境无法获取,所以直接用id获取
		var canvas=document.getElementById("canvas");
		var context=canvas.getContext("2d");
		 // 获取base64编码的图片,传入后台处理保存即可,或者在前台处理转成file再上传
		let base64 = canvas.toDataURL()
		$.post("/a/sys/file/webupload/uploadSignUser",{id:$("#userIdm").val(),base: base64},function (res) {
			layer.msg(res.msg);
			context.clearRect(0,0,canvas.width,canvas.height);
			$("#signature").hide()

		});
	}

</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值