手机端的手写签名保存

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<meta name="apple-mobile-web-app-capable" content="yes">
		<meta name="apple-mobile-web-app-status-bar-style" content="black">
		<link rel="stylesheet" href="__STATIC__/layui/css/layui.css">
		<script src="__STATIC__/js/jquery.min.js"></script>
		<script src="__STATIC__/js/layer/layer.js"></script>
		<title>签到</title>
		<style>
			.choose_btn{margin: 50px 0 30px;font-size: 15px;}
			#canvas{background: #e2e2e2;height: 100%;}
			.status_btn{z-index: 500;display: flex;justify-content: space-around;padding: 12px 0;margin-bottom:10px}
			.status_btn button{height: 32px;line-height: 32px;}
			.signature_img{text-align: center;}
			.signature_img img{border: 1px solid #e3e3e3;}
			.submit_btn{margin-top: 150px;width: 30%;font-size: 15px;}
			.signature_img{width: 100%; height: 150px; display: none}
		</style>
	</head>
	<body>
		<div id="imgg" style="width: 100%;text-align: center;">
			<button type="button" class="layui-btn choose_btn">点击签名</button>
			<div class="signature_img">
			    <img style="height: 150px; width: auto" src="" alt="">
				<button type="button" class="layui-btn layui-btn-normal submit_btn">提交</button>
			</div>
		</div>
		<script type="text/javascript">
			function setTop(){
				// 禁止滚动
				var top = $(document).scrollTop();
				$(document).on('scroll.unable',function (e) {
				    $(document).scrollTop(top);
				});
				
				$("body").css({'touch-action': 'none'});
				document.body.addEventListener('touchmove', (e) => {
				    e.preventDefault();
				    e.stopPropagation();
				}, { passive: false })
				
				layer.open({
					type: 0 
					,title: '签名'
					,content: `<div id="canvas">
						<div class="status_btn">
							<button type="button" id="clearCanvas" class="layui-btn layui-btn-danger">清除</button>
							<button type="button" id="saveCanvas" class="layui-btn layui-btn-normal layer-close" onclick="autograph()">保存</button>
						</div>
						<canvas id="canvas_id" style="background:#FFF;"></canvas>
						<div style="text-align:center;color:gray;font-size:15px;">请在以上白色区域内签字</div>
					</div>`
					,area:['100%','100%']
					,type: 1  //隐藏底部按钮
					,success:function(layero, index){
						new lineCanvas({
							el: document.getElementById("canvas"),//绘制canvas的父级div
							clearEl: document.getElementById("clearCanvas"),//清除按钮
							saveEl: document.getElementById("saveCanvas"),//保存按钮
							canvas:document.getElementById("canvas_id"),
							//      linewidth:1,//线条粗细,选填
							//      color:"black",//线条颜色,选填
								 // background:"#ffffff"//线条背景,选填
						});
					}
				});
			}
			
			$("#imgg .choose_btn").click(function(){
				setTop();
			})

			function autograph() { //保存关闭弹窗
				$(document).unbind("scroll.unable");
			}
			$(".submit_btn").click(function () { //提交
				var webUrl = "https://......"
			    submits(webUrl)
			})
			function submits(webUrl) {
				var index11 = layer.load(2);
				var imgUrl = $('.signature_img img').attr('src');
				console.log(imgUrl)
				$.ajax({
					url: webUrl,
					type: 'POST',
					data: {
						"imgurl": imgUrl
					},
					// dataType: 'json',
					success: function(data) {
						// console.log(data)
						layer.close(index11)
						if(data.code == 1){
							layer.msg(data.msg, {
								time: 1500,
								anim: 5,
								offset: 'auto',
							})
							setTimeout(function(){
								location.href = data.url;
							},1500)
						}else{
							layer.msg(data.msg, {
								time: 1500,
								anim: 5,
								offset: 'auto',
							})
						}
					}
				})
			}
			
			function lineCanvas(obj) {
			    this.linewidth = 3; //签名粗细
			    this.color = "#000000";
			    this.background = "#FFFFFF";
			    for (var i in obj) {
			        this[i] = obj[i];
			    };
				
			    this.cxt = this.canvas.getContext("2d");
			    this.cxt.fillStyle = this.background;
			    this.canvas.height = 150;  //设置画布签名高度
				this.canvas.width = document.documentElement.clientWidth;
				this.cxt.strokeStyle = this.color;//画笔的颜色
			    this.cxt.lineWidth = this.linewidth;//线条的宽度
			    this.cxt.lineCap = "round";
			    //开始绘制
			    this.canvas.addEventListener("touchstart", function(e) {
			        this.cxt.beginPath();
					this.cxt.moveTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY-document.documentElement.scrollTop-110); e.changedTouches[0].pageY-document.documentElement.scrollTop-82);
			    }.bind(this), false);
			    //绘制中
			    this.canvas.addEventListener("touchmove", function(e) {
					this.cxt.lineTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY-document.documentElement.scrollTop-110);
					e.changedTouches[0].pageY-document.documentElement.scrollTop-82);
			        this.cxt.stroke();
			    }.bind(this), false);
			    //结束绘制
			    this.canvas.addEventListener("touchend", function() {
			        this.cxt.closePath();
			    }.bind(this), false);
			    //清除画布
			    this.clearEl.addEventListener("click", function() {
			        this.cxt.clearRect(0, 0, this.canvas.width, this.canvas.height);
			    }.bind(this), false);
			    //保存图片,直接转base64
			    this.saveEl.addEventListener("click", function() {
			        var imgBase64 = this.canvas.toDataURL();
			        console.log(imgBase64);//图片路径
			        $(".signature_img").show();
			        $(".signature_img img").attr("src",imgBase64);//获取元素的src属性,并赋值图片的路劲。
					layer.closeAll();
			    }.bind(this), false);
			};
		</script>
	</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
app端手写签名组件是指在移动应用程序中添加手写签名功能模块。该组件可以允许用户使用手指或者触控笔在移动设备的屏幕上进行自由绘制,以实现电子签名的效果。 手写签名组件的实现原理是利用移动设备的触摸屏技术,将用户的触摸手势转化为相应的电子图像。具体而言,当用户在屏幕上滑动手指或触控笔时,组件会将这些坐标点记录下来,并以连续的线条形式显示在屏幕上。用户可以在画板上进行书写、绘制、擦除等操作,实现个性化的签名效果。 手写签名组件的使用场景广泛,可以应用于各类需要签名确认的场合。比如,在电子合同签署时,用户可以通过手写签名组件,在移动设备上输入自己的签名,代替传统的纸质签名,提高效率和便捷性。此外,手写签名组件还可以应用于表单签名、订单确认等各类业务场景。 手写签名组件的重要性在于在数字化时代仍然需要以传统签名方式进行确认的场合,通过移动设备上的手写签名功能,可以有效地将传统签名过程数字化,提高工作效率,减少纸质文件的使用。 总结而言,app端手写签名组件是一种便捷实用的功能模块,能够让用户在移动设备上实现电子签名。它通过记录用户的手势输入,模拟传统签名的效果,可以应用于各类签署确认的场合,提高工作效率,简化流程,并环保节能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值