基于vue如何制作签名组件,代码是什么

Admin 2022-08-09 群英技术资讯 370 次浏览

在实际应用中,我们有时候会遇到“基于vue如何制作签名组件,代码是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“基于vue如何制作签名组件,代码是什么”文章能帮助大家解决问题。


效果如下:

<template>
  <div class="sign">
    <div class="content">
      <canvas id="canvas" :width="width" :height="height"/>
    </div>
    <div class="btn">
      <button @click="clearCanvas()">清除</button>
      <button @click="save()">保存</button>
    </div>
  </div>
</template>
 
<script>
export default {
  name: 'App',
  data () {
    return {
    };
  },
  props: {
    // 画布宽度
    width: {
      type: Number,
      default: window.innerWidth
    },
    // 画布高度
    height: {
      type: Number,
      default: 500
    },
    // 笔触半径
    radius: {
      type: Number,
      default: 10
    },
    // 笔触颜色
    color: {
      type: String,
      default: '#000'
    },
    // 画布填充背景
    fillStyle: {
      type: String,
      default: '#ccc'
    }
  },
  created () {
  },
  mounted () {
    this.int();
  },
  methods: {
    // 绘制涂擦效果圆形
    // @param { integer } 圆心的x坐标
    // @param { integer } 圆心的y坐标
    // @param { integer } 圆心半径
    // @param { string } 填充的颜色
    fillCircle (ctx, x, y, radius, fillColor) {
      ctx.fillStyle = fillColor || this.color;
      ctx.beginPath();
      ctx.moveTo(x, y);
      ctx.arc(x, y, radius, 0, Math.PI * 2, false); // 标准画圆
      ctx.fill();
    },
    // 保存图片
    save (name = '签名图片') {
      let imgBase64 = this.canvas.toDataURL('image/png'); // 获取截图base64, 1表示质量(无损压缩)
      let a = document.createElement('a');
      a.download = name + '.png'; // 必须要设置download属性才能够直接下载base64图片
      a.href = imgBase64;
      a.click(); // 触发点击,起到下载效果
    },
    // 清除画布
    clearCanvas () {
      let canvas = this.canvas;
      canvas.getContext('2d').fillStyle = this.fillStyle;
      canvas.getContext('2d').fillRect(0, 0, this.width, this.height);
    },
    // 数据初始化
    int () {
      this.canvas = document.querySelector('#canvas');
      let ctx = this.canvas.getContext('2d');
      let move = false; // 按下标识
      ctx.fillStyle = this.fillStyle;
      ctx.fillRect(0, 0, this.width, this.height);
      // 事件兼容PC 移动端
      let eventStart = 'ontouchstart' in document ? 'touchstart' : 'mousedown';
      let eventMove = 'ontouchmove' in document ? 'touchmove' : 'mousemove';
      let eventEnd = 'ontouchend' in document ? 'touchend' : 'mouseup';
      this.canvas.addEventListener(eventStart, (e) => {
        console.log(e);
        let sx = e.touches ? e.touches[0].pageX : e.pageX;
        let sy = e.touches ? e.touches[0].pageY : e.pageY;
        move = true;
        this.fillCircle(ctx, sx, sy, this.radius);
      }, false);
      this.canvas.addEventListener(eventMove, (e) => {
        let sx = e.touches ? e.touches[0].pageX : e.pageX;
        let sy = e.touches ? e.touches[0].pageY : e.pageY;
        move && this.fillCircle(ctx, sx, sy, this.radius);
      }, false);
      this.canvas.addEventListener(eventEnd, (e) => {
        move = false;
      }, false);
    }
  }
};
</script>
<style lang="less" scoped>
.sign{
  .btn {
    padding:10px;
    button {
      height: 50px;
      width:100%;
      margin-bottom:10px;
      font-size: 20px;
    }
  }
}
</style>

以上就是关于“基于vue如何制作签名组件,代码是什么”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
群英智防CDN,智能加速解决方案
标签: vue签名组件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服