基于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 相关文章推荐
Area 区域实现post提交数据的js写法
Apr 22 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
js正则表达式验证表单【完整版】
Mar 06 Javascript
JS监控关闭浏览器操作的实例详解
Sep 12 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
Nov 14 Javascript
javascript定时器的简单应用示例【控制方块移动】
Jun 17 Javascript
vue使用axios实现excel文件下载的功能
Jul 16 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命令行脚本单进程运行的方法
2014/04/15 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
PHP在线书签系统分享
2016/01/04 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
多版本Python共存的配置方法
2017/05/22 Python
python实现Adapter模式实例代码
2018/02/09 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
Python中字符串与编码示例代码
2019/05/20 Python
python随机数分布random均匀分布实例
2019/11/27 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
《诺贝尔》教学反思
2014/02/17 职场文书
怎么写好自荐书
2014/03/02 职场文书
解除财产保全担保书
2014/05/20 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
政协工作总结2015
2015/05/20 职场文书
教师考核鉴定意见
2015/06/05 职场文书
读书笔记格式
2015/07/02 职场文书
求职信如何撰写?
2019/05/22 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers