基于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 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
浅谈vuex 闲置状态重置方案
Jan 04 Javascript
全面了解JavaScript的作用域链
Apr 03 Javascript
详解Angular cli配置过程记录
Nov 07 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编程语言开发动态WAP页面
2006/10/09 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
php修改数组键名的方法示例
2017/04/15 PHP
JQuery 学习技巧总结
2010/05/21 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
深入理解Django-Signals信号量
2019/02/19 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
通知函的格式
2015/04/27 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
会计岗位工作总结
2015/08/12 职场文书
开学随笔
2015/08/15 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
2016年敬老月活动总结
2016/04/05 职场文书