我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于Vue实现手势签名

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于Vue实现手势签名

本文实例为大家分享了基于Vue实现手势签名的具体代码,供大家参考,具体内容如下

废话不多说,直接上效果图&源码

代码如下

1. template

<template>
  <main class="hand-sign-page">
    <header class="sign-head">请在下方区域内签名</header>
    <div id="signContain" :style="{'--back': background}"></div>
    <footer class="sign-foot">
      <button @click="clearCanvas">清除</button>
      <button @click="saveCanvas">保存</button>
    </footer>
    <img v-show="vaildSign" class="sign-img" :class="lazy" data-src="vaildSign" alt=" "/>
  </main>
</template>

2. js

<script>
  export default {
    name: "hand-sign",
    data() {
      return {
        domEl: null,//绘制canvas的父级div
        canvas: null,//画布
        cxt: null,//绘画环境
        linewidth:1,//线条粗细,选填
        color:"black",//线条颜色,选填
        background:"aliceblue",//线条背景,选填
        vaildSign: null
      }
    },
    
    mounted() {
      this.initCanvas();
    },

    methods: {
      initCanvas() {
        this.domEl = document.getElementById("signContain");
        this.canvas = document.createElement("canvas");
        this.domEl.appendChild(this.canvas);
        this.cxt = this.canvas.getContext("2d");
        this.canvas.width = this.domEl.clientWidth;
        this.canvas.height = this.domEl.clientHeight;
        this.cxt.fillStyle = this.background;
        this.cxt.fillRect(0, 0, this.canvas.width, this.canvas.height);
        this.cxt.strokeStyle = this.color;
        this.cxt.lineWidth = this.linewidth;
        //this.cxt.lineCap = "round";
        this.clearCanvas();//先清理下

        //开始绘制
        this.canvas.addEventListener("touchstart", (e) => {
          this.cxt.beginPath();
          this.cxt.moveTo(e.changedTouches[0].pageX - e.target.offsetLeft, e.changedTouches[0].pageY - e.target.offsetTop);
        }, false);

        //绘制中
        this.canvas.addEventListener("touchmove", (e)=> {
          this.cxt.lineTo(e.changedTouches[0].pageX - e.target.offsetLeft, e.changedTouches[0].pageY - e.target.offsetTop);
          this.cxt.stroke();
        }, false);
        
        //结束绘制
        this.canvas.addEventListener("touchend", (e)=> {
          this.cxt.closePath();
        }, false);
      },

      //清除画布
      clearCanvas() {
        this.cxt.clearRect(0, 0, this.canvas.width, this.canvas.height);
      },

      //保存画布
      saveCanvas() {
        console.log(this.blankCanvas());//检查画布是否为空白
        if(this.blankCanvas()) {
          window.alert('请签名');
        }else {
          this.vaildSign = this.canvas.toDataURL();
        }
      },

      //canvas非空验证
      blankCanvas() {
        let blank = document.createElement('canvas');//系统获取一个空canvas对象
        blank.width = this.canvas.width;
        blank.height = this.canvas.height;
        return this.canvas.toDataURL() == blank.toDataURL();//比较值相等则为空
      },

    }
  }
</script>

3. css

<style lang="less" scoped>
  .hw(@h, @w: @h) {
    height: @h;
    width: @w
  }

  .hand-sign-page{
    background-color: #fff;
    .sign-head {
      text-align: center;
      padding: 10px;
      border-bottom: 1px solid #ebebeb;
      color: #666;
      font-size: 14px;
    }

    #signContain {
      .hw(400px, 100%);
      background-color: var(--back);
    }

    .sign-foot{
      display: flex;
      justify-content: center;
      margin: 15px;

      button {
        margin: 0 15px;
        padding: 10px 20px;
        background-color: #ddd;
        border-radius: 5px;

        &:active {
          background-color: #efefef;
        }
      }
    }

    .sign-img {
      .hw(100px, 200px);
      display: block;
      margin: 10px auto;
    }
  }

</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于Vue实现手势签名

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于JavaScript实现电子签名功能

这篇文章主要为大家详细介绍了如何通过JavaScript实现简单的电子签名功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

基于Android中手势交互的实现方法

闲来无事,琢磨琢磨Android中的手势交互,发现网上在手势方面的文章并不是很多,而且很多的参考价值并不大。于是出此博文,与大家共勉。鉴于我写此博文时对手势交互的研究也不是特深,如果有不正确的地方,还请各位博友批评指正。 首先,在Andro
2022-06-06

如何使用vue实现手写签名功能

本篇内容介绍了“如何使用vue实现手写签名功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 个人实现截图:安装:npm install v
2023-06-20

基于Mediapipe+Opencv如何实现手势检测功能

今天给大家介绍一下基于Mediapipe+Opencv如何实现手势检测功能。,文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。一、前言基于Mediapipe+Op
2023-06-26

Android实现手写签名

本文实例为大家分享了Android手写签名的实现方法,产品要求用户可以在app上签协议。。所以得弄个手写签名版,参考了一些资料自己写了个PaintView去继承View,实现签名功能。package com.****.*****.widge
2022-06-06

基于JS实现Android,iOS一个手势动画效果

废话不多说了,先给大家展示下效果图:这是iOS下的效果,android下完全一致。通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手势控制图片上下
2022-06-06

JavaSE 6基于JSR105的XML签名是怎样实现的

这篇文章将为大家详细讲解有关JavaSE 6基于JSR105的XML签名是怎样实现的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我们开始分析一个实际的XML签名示例应用程序。  一、 密码
2023-06-03

Vue怎么使用sign-canvas实现在线手写签名

这篇文章主要讲解了“Vue怎么使用sign-canvas实现在线手写签名”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用sign-canvas实现在线手写签名”吧!效果图:sig
2023-06-30

Python机器视觉怎么实现基于OpenCV的手势检测

本篇内容介绍了“Python机器视觉怎么实现基于OpenCV的手势检测”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 简介今天学长向大家介
2023-06-22

基于微信签名signature获取(实例讲解)

微信分享的签名算法微信也写有,主要是调用接口需要使用服务器(微信官方文档是这么说的,试了下前端居然特么也可以),不过微信的access_token和jsapi_ticket是有使用次数限制的,所以还是用服务器来获取,得到以后存下来,下次使用
2023-05-31

编程热搜

目录