基于canvas实现手写签名(vue)


Posted in Javascript onMay 21, 2020

最近一直在研究canvas的东西,正好之前对手写签名这块有点兴趣。就自己基于vue写了一个简易的手写签名demo。

其中原理比较简单,先生成一个canvas画布,并对canvas进行touchstart和touchmove事件进行监听。当监听touchstart事件被触发时,我们开始触发canvas里的beginPath事件并且设置moveTo原始点。当监听touchmove事件则去不断去触发lineTo事件,最后stroke()。

demo里还有清除签名和保存签名的功能,分别对应了clearRect()和toDataURL()方法。

具体的demo代码如下:

<template>
  <div>
    <canvas id="canvas" width="300" height="150">

    </canvas>
    <div class="btn">
     <span @click="toClear()">清除</span>
     <span @click="toSave()">保存</span>
    </div>
  </div>
</template>

<script>
  export default {
    name: "sign-name",
    data(){
     return {
       ctx:null,
       canvas:null
     }
    },
    mounted() {
     this.initPage()
    },
    methods:{
     initPage() {
      this.canvas = document.getElementById('canvas')
      if(this.canvas.getContext){
       this.ctx = this.canvas.getContext('2d')
       let background = "#ffffff"
       this.ctx.lineCap = 'round'
       this.ctx.fillStyle = background
       this.ctx.lineWidth = 2
       this.ctx.fillRect(0,0,350,150)

       this.canvas.addEventListener("touchstart",(e)=>{
        console.log(123,e)
        this.ctx.beginPath()
        this.ctx.moveTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
       })

       this.canvas.addEventListener("touchmove",(e)=>{
        this.ctx.lineTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
        this.ctx.stroke()
       })

      }
     },
     toClear() {
      this.ctx.clearRect(0,0,300,150)
     },
     toSave() {
      let base64Img = this.canvas.toDataURL()
      console.log(123,base64Img)
     }
    }

  }
</script>

<style lang="scss" scoped>
 .btn {
  height: px2Vw(55);
  position: fixed;
  bottom: 0;
  line-height: px2Vw(55);
  border-top: px2Vw(1) solid #f7f8f9;
  span {
   display: inline-block;
   width: px2Vw(185);
   text-align: center;
  }
 }
 canvas {
  position: fixed;
  border: 2px dashed #cccccc;
  float: right;
 }
</style>

代码运行后的效果图如下:

基于canvas实现手写签名(vue)

基于canvas实现手写签名(vue)

这只是个简易的demo,肯定会有很多未考虑到的地方。demo的下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
jQuery1.6 正式版发布并提供下载
May 05 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
JavaScript返回网页中超链接数量的方法
Apr 03 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
May 05 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
JavaScript实现图片拖曳效果
Sep 08 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
jquery实现聊天机器人
Feb 08 jQuery
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
Apr 26 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 #jQuery
js cavans实现静态滚动弹幕
May 21 #Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 #Javascript
JavaScript实现HSL拾色器
May 21 #Javascript
js实现拾色器插件(ColorPicker)
May 21 #Javascript
原生js实现日期选择插件
May 21 #Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 #Javascript
You might like
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
php实现的在线人员函数库
2008/04/09 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
php集成开发环境详解
2019/09/24 PHP
修改发贴的编辑功能
2007/03/07 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
python字符串str和字节数组相互转化方法
2017/03/18 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python学生信息管理系统(完整版)
2020/04/05 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python字符串的index和find的区别详解
2020/06/20 Python
说出数据连接池的工作机制是什么?
2013/04/19 面试题
我们的节日端午节活动方案
2014/03/02 职场文书
争先创优演讲稿
2014/09/15 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL