基于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 相关文章推荐
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
一行代码告别document.getElementById
Jun 01 Javascript
jQuery设置与获取HTML,文本和值的简单实例
Feb 26 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
jquery中的常见问题及快速解决方法小结
Jun 14 Javascript
JS实现title标题栏文字不间断滚动显示效果
Sep 07 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
在node中使用jwt签发与验证token的方法
Apr 03 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
Jun 10 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
javascript读取本地文件和目录方法详解
Aug 06 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
PHP数据过滤的方法
2013/10/30 PHP
php文件操作相关类实例
2015/06/18 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
JS 继承实例分析
2008/11/04 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
python基础教程之五种数据类型详解
2017/01/12 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
夜大毕业生自我鉴定
2013/10/31 职场文书
读书活动总结范文
2014/04/26 职场文书
公司开业致辞
2015/07/29 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书