uniapp实现微信小程序的电子签名效果(附demo)

发布时间:2024-02-21 09:00

目录
  • 1、标签和样式
  • 2、横屏切换
  • 3、绘图
    • 3.1、初始化数据会吧?
    • 3.2、触摸开始时获取起点,会吧?
    • 3.3、触摸移动获取路径点,会吧?
    • 3.4、触摸结束,将未绘制的点清空防止对后续路径产生干扰,简单吧?
    • 3.5、绘制笔迹,没得问题吧?
  • 4、扫尾处理

    画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。

    开发框架:uniapp
    开发语言:vue2
    展示平台:微信小程序(实际可以兼容多个平台)

    标签和样式没什么好说的,这里绘制了简单的页面,见下图:

    \"uniapp实现微信小程序的电子签名效果(附demo)_第1张图片\"

    1、标签和样式

    
    
    
    
    
    

    2、横屏切换

    到【pages.json】文件中添加横屏切换配置
    注意:不同的平台横屏切换将有所不一样。这里是针对微信小程序的横屏适配

    {
    	\"pages\": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
    		{
    			\"path\": \"pages/index/index\",
    			\"style\": {
    				\"navigationBarTitleText\": \"亲笔签名\",//导航栏标题
    				\"pageOrientation\": \"landscape\",//切换横屏
    				\"enablePullDownRefresh\": false,//关闭下拉刷新
    				\"disableScroll\": true // 整体页面禁止上下滑动
    			}
    		}
    	],
    	\"globalStyle\": {
    		\"navigationBarTextStyle\": \"black\",
    		\"navigationBarBackgroundColor\": \"#FFFFFF\",
    		\"backgroundColor\": \"#f5f5f5\",
    		\"navigationStyle\": \"default\", // default/custom。custom即取消默认的原生导航栏
    		\"mp-alipay\": {
    			\"transparentTitle\": \"always\",
    			\"titlePenetrate\": \"YES\"
    		}
    	}
    }
    

    然后是绘制逻辑处理,注意点在代码中备注:

    3、绘图

    3.1、初始化数据会吧?

    		data() {
    			return {
    				canvasCtx: \'\', //绘图图像
    				points: [], //路径点集合
    				hasSign: false,
    				isInit: false,
    			}
    		},
    		onLoad(query) {
    			this.canvasCtx = uni.createCanvasContext(\'canvas_sign\', this) //创建绘图对象
    			//设置画笔样式
    			this.canvasCtx.lineWidth = 6
    			// 设置线条的端点样式
    			this.canvasCtx.lineCap = \'round\'
    			// 设置线条的交点样式
    			this.canvasCtx.lineJoin = \'round\'
    		},
    

    3.2、触摸开始时获取起点,会吧?

    			touchstart: function(e) {
    				if (!this.isInit) {
    					this.isInit = true
    					this.autographClick(1);
    				}
    				let startX = e.changedTouches[0].x
    				let startY = e.changedTouches[0].y
    				let startPoint = {
    					X: startX,
    					Y: startY
    				}
    				this.points.push(startPoint)
    				//每次触摸开始,开启新的路径
    				this.canvasCtx.beginPath()
    			},
    

    3.3、触摸移动获取路径点,会吧?

    			touchmove: function(e) {
    				let moveX = e.changedTouches[0].x
    				let moveY = e.changedTouches[0].y
    				let movePoint = {
    					X: moveX,
    					Y: moveY
    				}
    				this.points.push(movePoint) //存点
    				let len = this.points.length
    				if (len >= 2) {
    					this.draw() //绘制路径
    				}
    
    			},
    

    3.4、触摸结束,将未绘制的点清空防止对后续路径产生干扰,简单吧?

    			touchend: function() {
    				this.points = []
    				this.canvasCtx.draw(true)
    			},
    

    3.5、绘制笔迹,没得问题吧?

    这里有几个注意点:

    1.为保证笔迹实时显示,必须在移动的同时绘制笔迹
    2.为保证笔迹连续,每次从路径集合中区两个点作为起点(moveTo)和终点(lineTo)
    3.将上一次的终点作为下一次绘制的起点(即清除第一个点)

    			draw: function() {
    				let point1 = this.points[0]
    				let point2 = this.points[1]
    				this.points.shift()
    				this.canvasCtx.moveTo(point1.X, point1.Y)
    				this.canvasCtx.lineTo(point2.X, point2.Y)
    				this.canvasCtx.stroke()
    				this.canvasCtx.draw(true)
    				this.hasSign = true
    			},
    

    4、扫尾处理

    上面的实现了,说明就可以签下你大名了。这里扫尾工作(按钮点击功能实现)只是景上添花。根据实际情况不一定要做。

    
    

    demo地址:

    gitee地址:https://gitee.com/chenzm_186/autograph-mini.git

    到此这篇关于uniapp实现微信小程序的电子签名效果的文章就介绍到这了,更多相关uniapp小程序电子签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    ItVuer - 免责声明 - 关于我们 - 联系我们

    本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

    桂ICP备16001015号