基于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 相关文章推荐
js 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
javascript之bind使用介绍
Oct 09 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
Aug 25 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 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翻页类
2009/06/01 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP pear安装配置教程
2016/05/14 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
php实现登录页面的简单实例
2019/09/29 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
js中的闭包学习心得
2018/02/06 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python实现的数据结构与算法之链表详解
2015/04/22 Python
python发送邮件实例分享
2017/07/28 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python内置函数locals和globals对比
2020/04/28 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
Django websocket原理及功能实现代码
2020/11/14 Python
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
敬老文明号事迹材料
2014/01/16 职场文书
2014年团委工作总结
2014/11/13 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
浅谈Python协程asyncio
2021/06/20 Python
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android