基于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 相关文章推荐
会自动逐行上升的文本框
Jun 30 Javascript
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
Dec 19 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
Express框架之connect-flash详解
May 31 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
el-select数据过多懒加载的解决(loadmore)
May 29 Javascript
vue安装遇到的5个报错及解决方法
Jun 12 Javascript
Js跳出两级循环方法代码实例
Sep 22 Javascript
JavaScript实现移动小精灵的案例代码
Dec 12 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中filter_input函数用法分析
2014/11/15 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
Symfony生成二维码的方法
2016/02/04 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
MySQL最常见的操作语句小结
2015/05/07 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
详解flask表单提交的两种方式
2018/07/21 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python os.listdir()乱码解决方案
2021/01/31 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
幼儿园教师请假制度
2014/01/16 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
销售员岗位职责
2014/06/09 职场文书