经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
uni-app通过canvas实现手写签名
来源:cnblogs  作者:林恒  时间:2020/12/8 9:05:03  对本文有异议

分享一个uni-app实现手写签名的方法

具体代码如下:

  1. <template>
  2. <view >
  3. <view class="title">请在下面输入签名:</view>
  4. <canvas class="mycanvas" canvas-id="mycanvas" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"></canvas>
  5. <view class="footer">
  6. <view class="left" @click="finish">完成</view>
  7. <view class="right" @click="clear">清除</view>
  8. </view>
  9. </view>
  10. </template>
  11.  
  12. <script>
  13. var x = 20;
  14. var y =20;
  15. export default{
  16. data(){
  17. return {
  18. ctx:'', //绘图图像
  19. points:[] //路径点集合
  20. }
  21. },
  22. onLoad() {
  23. this.ctx = uni.createCanvasContext("mycanvas",this); //创建绘图对象
  24. //设置画笔样式
  25. this.ctx.lineWidth = 4;
  26. this.ctx.lineCap = "round"
  27. this.ctx.lineJoin = "round"
  28. },
  29. methods:{
  30. //触摸开始,获取到起点
  31. touchstart:function(e){
  32. let startX = e.changedTouches[0].x;
  33. let startY = e.changedTouches[0].y;
  34. let startPoint = {X:startX,Y:startY};
  35. /* **************************************************
  36. #由于uni对canvas的实现有所不同,这里需要把起点存起来
  37. * **************************************************/
  38. this.points.push(startPoint);
  39. //每次触摸开始,开启新的路径
  40. this.ctx.beginPath();
  41. },
  42. //触摸移动,获取到路径点
  43. touchmove:function(e){
  44. let moveX = e.changedTouches[0].x;
  45. let moveY = e.changedTouches[0].y;
  46. let movePoint = {X:moveX,Y:moveY};
  47. this.points.push(movePoint); //存点
  48. let len = this.points.length;
  49. if(len>=2){
  50. this.draw(); //绘制路径
  51. }
  52. },
  53. // 触摸结束,将未绘制的点清空防止对后续路径产生干扰
  54. touchend:function(){
  55. this.points=[];
  56. },
  57. /* ***********************************************
  58. # 绘制笔迹
  59. # 1.为保证笔迹实时显示,必须在移动的同时绘制笔迹
  60. # 2.为保证笔迹连续,每次从路径集合中区两个点作为起点(moveTo)和终点(lineTo)
  61. # 3.将上一次的终点作为下一次绘制的起点(即清除第一个点)
  62. ************************************************ */
  63. draw: function() {
  64. let point1 = this.points[0]
  65. let point2 = this.points[1]
  66. this.points.shift()
  67. this.ctx.moveTo(point1.X, point1.Y)
  68. this.ctx.lineTo(point2.X, point2.Y)
  69. this.ctx.stroke()
  70. this.ctx.draw(true)
  71. },
  72. //清空画布
  73. clear:function(){
  74. let that = this;
  75. uni.getSystemInfo({
  76. success: function(res) {
  77. let canvasw = res.windowWidth;
  78. let canvash = res.windowHeight;
  79. that.ctx.clearRect(0, 0, canvasw, canvash);
  80. that.ctx.draw(true);
  81. },
  82. })
  83. },
  84. //完成绘画并保存到本地
  85. finish:function(){
  86. uni.canvasToTempFilePath({
  87. canvasId: 'mycanvas',
  88. success: function(res) {
  89. let path = res.tempFilePath;
  90. uni.saveImageToPhotosAlbum({
  91. filePath:path
  92. })
  93. }
  94. })
  95. }
  96. },
  97. }
  98. </script>
  99.  
  100. <style>
  101. .title{
  102. height:50upx;
  103. line-height: 50upx;
  104. font-size: 16px;
  105. }
  106. .mycanvas{
  107. width: 100%;
  108. height: calc(100vh - 200upx);
  109. background-color: #ECECEC;
  110. }
  111. .footer{
  112. font-size: 16px;
  113. height: 150upx;
  114. display: flex;
  115. justify-content: space-around;
  116. align-items: center;
  117. }
  118. .left,.right{
  119. line-height: 100upx;
  120. height: 100upx;
  121. width: 250upx;
  122. text-align: center;
  123. font-weight: bold;
  124. color: white;
  125. border-radius: 5upx;
  126. }
  127. .left{
  128. background: #007AFF;
  129. }
  130. .right{
  131. background:orange;
  132. }
  133. </style>

原文链接:http://www.cnblogs.com/smileZAZ/p/14086849.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号