基于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 相关文章推荐
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 Javascript
js获取指定的cookie的具体实现
Feb 20 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
JavaScript模拟鼠标右键菜单效果
Dec 08 Javascript
浅谈node中的exports与module.exports的关系
Aug 01 Javascript
详解JS数组Reduce()方法详解及高级技巧
Aug 18 Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 Javascript
javaScript实现一个队列的方法
Jul 14 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&amp;&amp;mysql)二
2006/10/09 PHP
谈谈新手如何学习PHP
2006/12/23 PHP
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
python实现爬虫下载美女图片
2015/07/14 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
怎样声明接口
2014/09/19 面试题
财务会计专业毕业生自荐信
2013/10/19 职场文书
教学评估实施方案
2014/03/16 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
办公室规章制度范本
2015/08/04 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
golang中的空接口使用详解
2021/03/30 Python
Win10 Anaconda安装python-pcl
2022/04/29 Servers