基于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触发器详解
Mar 10 Javascript
使用户点击后退按钮使效三行代码
Jul 07 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
基于JS实现限时抢购倒计时间表代码
May 09 Javascript
使用vue + less 实现简单换肤功能的示例
Feb 21 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
详解小程序横屏方案对比
Jun 28 Javascript
js实现圆形菜单选择器
Dec 03 Javascript
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php自动加载方式集合
2016/04/04 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
python实现猜单词小游戏
2020/05/22 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
Python高并发和多线程有什么关系
2020/11/14 Python
python 操作excel表格的方法
2020/12/05 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
大学校运会广播稿
2014/02/03 职场文书
学校万圣节活动方案
2014/02/13 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
青岛导游词
2015/02/12 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
Python+Appium新手教程
2021/04/17 Python
python学习之panda数据分析核心支持库
2021/05/07 Python