<template>
        <div>
          <div class="msgInput">
            <div class="msgInputLeft">
                <span class="qianming">签名:</span>
                <div class="sign-canvas">
                    <canvas
                            id="canvas"
                            width="600"
                            height="600"
                            @mousedown="canvasDown($event)"
                            @mousemove="canvasMove($event)"
                            @mouseup="canvasUp()"
                            @mouseleave="canvasLeave()"
                            ref="canvas"
                    >
                        抱歉,您的浏览器暂不支持canvas元素
                    </canvas>
                </div>
              
                        <div class="bottom_btn">
                            <el-button type="primary" @click="clear" class='clickReset' round>清除签名</el-button>
                            <el-button type="primary" @click="request"  class='clickFinish'  round>确认</el-button>
                            <!-- <el-button type="primary" @click="request" round>发送请求</el-button> -->
                        </div>
                    
            </div>
          </div>
        </div>
      </template>
      
      <script>
        export default {
          components: {},
          props: {},
          data() {
            return {
              imgBase64:''
              
            }
          },
          watch: {},
          computed: {},
          methods: {
            show(){
                    this.canvas = this.$refs.canvas;// 指定canvas
                    this.ctx = this.canvas.getContext("2d") // 设置2D渲染区域
                    this.ctx.lineWidth = 5; // 设置线的宽度
                },
                canvasDown(e) {
                    console.log(e);
                    this.canvasMoveUse = true;
                    const canvasX = e.clientX - e.target.offsetLeft + document.documentElement.scrollLeft
                    const canvasY = e.clientY -130 - e.target.offsetTop + document.documentElement.scrollTop
                    this.ctx.beginPath()  // 移动的起点
                    this.ctx.moveTo(canvasX, canvasY)
                },
                canvasMove(e) {
                    // 只在移动是进行绘制图线
                    if (this.canvasMoveUse) {
                        const t = e.target;
                        let canvasX;
                        let canvasY;
                        canvasX = e.clientX - t.offsetLeft + document.documentElement.scrollLeft
                        canvasY = e.clientY -130 - t.offsetTop + document.documentElement.scrollTop 
                        this.ctx.lineTo(canvasX, canvasY)
                        this.ctx.stroke()
                    }
                },
                canvasUp() {
                    this.canvasMoveUse = false;
                },
                canvasLeave() {
                    this.canvasMoveUse = false;
                },
                clear(){
                    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
                },
                request() {
                    this.imgBase64 = this.$refs.canvas.toDataURL('image/png');
                    console.log(this.imgBase64);
 
               
          },
          created() {},
          mounted() {
            this.show();
          }
        }
      
      </script>
      <style>
        .qianming{
          margin-left: 30px;
          font-size: 20px;
        }
        .qianming_title{
            margin-left: 30px;
            padding-top:20px;
            font-size: 20px;
        }
        .bottom_btn{
          margin-top:40px;
        }
        .msgInput {
          height: 800;
          width: 800px;
          
        }
        .msgInputLeft {
          height: 800px;
          width: 800px;
          background: white;
          border-radius: 15px;
          padding-top:20px;
        }
        .sign-canvas{
            display: flex;
            flex-direction: column;
            align-items: center;
            width: 600px;
            height: 600px;
            padding: 20px 30px;
        }
        .sign-canvas canvas{
            background-color: #fefeff;
            border: 2px solid #409EFF;
            border-radius:10px;
            margin-left: 25%;
        }
        .sign-btn {
            display: flex;
            margin:20px 0;
        }
        .sign-btn div {
            width: 175px;
            text-align: center;
            height: 70px;
            line-height: 70px;
            color: #FFFFFF;
        }
        .sign-btn div:active {
            background-color: rgb(255, 253, 253);
            color: #333333;
        }
        .sign-btn .clear {
            background-color: #FF8F58;
        }
        .sign-btn .save {
            background-color: #0599D7;
        }
        .clickReset{
            margin-top:20px;
            margin-left: 30px;
            background-color: white;
            color:#409EFF;
            border: 2px solid #409EFF;
        }
        .clickFinish{
            float: right;
            margin-top:20px;
            margin-right: 30px;
        }
      </style>
      

VUE中使用canvas做签名功能,兼容IE的更多相关文章

  1. vue中使用canvas绘制签名

    不多说,上代码: <template>         <div class="sign-canvas">             <canvas   ...

  2. vue中axios 配置请求拦截功能 及请求方式如何封装

    main.js 中: import axios from '................/axios' axios.js 中: //axios.js import Vue from 'vue' i ...

  3. 019——VUE中v-for与computer结合功能实例讲解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. vue中使用sass 做减法计算

    首先确认已安装sass依赖, yarn指令:yarn add sass-loader, style中写法如下: 注意calc(100% - 200px); 之间有两个空格的,

  5. vue中element 的上传功能

    element 的上传功能 最近有个需求,需要在上传文件前,可以进行弹窗控制是否上传upload 看完文档后,感觉有两种思路可以实现 基于before-upload :上传文件之前的钩子,参数为上传的 ...

  6. vue中使用axios下载文件,兼容IE11

    一.设置axios返回值为blob 二.使用a标签的down属性下载,如果是IE浏览器,可以使用navigator.msSaveBlob进行下载 // data的数据类型是blob downloadF ...

  7. 在vue中实现锚点定位功能

    场景如下: 今天早上看到需求方新提的一个需求,这是一份网上答卷,点击题数要实现滚动到对应题目的位置: 注意点:每题题目的高度是不受控制的,你可以取到想跳转的index:(我再循环题目时做了index+ ...

  8. vue项目中使用canvas

    canvas API 文档:https://www.canvasapi.cn/ 一.在html中使用canvas canvas 元素用于在网页上绘制图形.  在html中,使用 document.ge ...

  9. vue(6)—— vue中向后端异步请求

    异步请求 其实什么是异步请求已经不用多说了,通俗的说,就是整个页面不会刷新,需要更新的部分数据做局部刷新,其他数据不变. 学到这里,你应该用过jquery里的ajax了,所以很能理解了,不多说了.详细 ...

随机推荐

  1. Gym 100917M Matrix, The

    题目链接: http://codeforces.com/gym/100917/problem/M --------------------------------------------------- ...

  2. python杂谈

    1.for循环过界保护 例如: a=len([1,2,3]) for i in range(a): for j in range(i+1:a) print(i,j) 不会报错 2.python集合和列 ...

  3. gitlab+jenkins自动化打包IOS-jenkins配置

    实现的效果如图:  构建界面: 完成效果: 功能说明: 根据选择的代码分支,执行构建打包 构建成功后根据ipa/apk生成二维码,并可在历史构建列表中展示各个版本的二维码,通过手机扫描二维码可直接安装 ...

  4. javaSE javaEE javaME的区别、有什么不同?

    http://zhidao.baidu.com/link?url=oFEPOmW8BnQ0M0w0krS9DyMA5UCUufgHJWV45r9UQZ-0vp_IOx-Yl-VV0hZQ-vHXGYo ...

  5. Vagrant - 打造跨平台的一致开发环境

    官网 参考资料 借助 Vagrant ,可以使用 Vagrantfile 文件自动化虚拟机的安装和配置流程,方便快速的打造跨平台的统一开发环境. 1. Vagrant 是啥 Vagrant 用于构建及 ...

  6. hihoCoder 1014 : Trie树(字典树)

    传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小 ...

  7. Git011--分支管理策略

    Git--分支管理策略 一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,G ...

  8. HTML DOM cursor 属性

    值 描述 url 需被使用的自定义光标的URL 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏览器设 ...

  9. Hexo-博客yilia主题创建分类(categories)和标签(tags)首页

    转载自:http://orzcss.com/posts/5a207d64/ 概述 默认安装的 hexo 本身是没有分类和标签首页的,例如:http://orzcss.com/categories/页面 ...

  10. openssl使用

    一. 加密方法 dsaffdfd fgggg 1.对称加密: 加密算法 + 口令 加密算法: DES(56bits),3DES(用des加密反复加密三次),AES(128bits),Blowfish ...