canvas手写签名组件

news2024/11/25 22:34:31

效果图👇
在这里插入图片描述
代码不多直接粘在这里

<template>
  <div class="border">
    <canvas
      ref="canvas"
      width="800"
      height="500"
      class="border-success"
      tabindex="0"
      @mousedown="onMouseDown"
    />
    <footer slot="footer" class="dialog-footer text-center">
      <button type="danger" @click.native.prevent="clearPanel">清空</button>
      <button type="primary" @click="confirm">确认</button>
    </footer>
    <img class="imgCanvas" :src="imgUrl" />
  </div>
</template>

<script>
import { defineComponent, ref, nextTick } from "vue";
export default defineComponent({
  name: "environAmbitus",
  setup() {
    const canvas = ref(null);
    const imgUrl = ref();

    // 开始签名
    function onMouseDown(e) {
      const el = e.target || e.srcElement; //获取事件源
      const ctx = el.getContext("2d"); //获取canvas的上下文
      ctx.lineWidth = 3; //线条宽度
      ctx.beginPath(); //开始路径绘制
      ctx.moveTo(e.offsetX, e.offsetY); //设置路径起点,坐标为(20,20)
      ctx.lineTo(e.offsetX, e.offsetY); //设置路径终点,坐标为(200,20)
      ctx.stroke(); //图形边框绘制
      el.onmousemove = function(e) {
        //鼠标移动事件
        if (e.which === 0) {
          el.onmousemove = null;
          el.onmouseup = null;
          return;
        }
        ctx.lineTo(e.offsetX, e.offsetY);
        ctx.stroke();
      };
      // el.onmouseup = function () {
      //   //鼠标抬起事件
      //   el.onmousemove = null;
      //   el.onmouseup = null;
      // };
      el.focus();
    }

    // 清空签名
    function clearPanel(e) {
      nextTick(() => {
        // const el = canvas;
        const ctx = canvas.value.getContext("2d");
        ctx.clearRect(0, 0, canvas.value.width, canvas.value.height);
      });
    }

    // 确认签名
    function confirm() {
      nextTick(() => {
        try {
          // const canvas = this.$refs["canvas"];
          const blank = document.createElement("canvas"); // 创建一个空canvas对象
          blank.width = canvas.value.width;
          blank.height = canvas.value.height;
          imgUrl.value = canvas.value.toDataURL();// 将画布上的内容导出为图片
        } catch (e) {
          console.warn(e);
        }
      });
    }
    return { onMouseDown, confirm, clearPanel, canvas, imgUrl };
  }
});
</script>
<style scoped>
.border {
  width: 800px;
  height: 500px;
  border: 1px solid skyblue;
  box-sizing: border-box;
}
</style>

需要注意的是 可绘制区域是canvas的height width控制的,用的话可以给他改成父组件传递的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…

【RabbitMQ实战】01 3分钟在Linux上安装RabbitMQ

本节采用docker安装RabbitMQ。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来&#xff0c;不得不说真的很方便啊&#xff0c;好了&#xff0c;开搞。使用前提&#xff1a;Linux虚拟…

验证NIO的非阻塞模型

我们知道传统BIO模型在等待客户端连接时是阻塞的&#xff0c;读取数据时如果没有数据&#xff0c;也是阻塞的&#xff0c;而NIO则可以配置成非阻塞&#xff0c;废话不多说&#xff0c;直接看代码&#xff1a; import java.net.InetSocketAddress; import java.nio.ByteBuffer;…

OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效

作者&#xff1a;gentle_zhou 原文链接&#xff1a;OWASP Top 10漏洞解析&#xff08;2&#xff09;- A2:Cryptographic Failures 加密机制失效-云社区-华为云 Web应用程序安全一直是一个重要的话题&#xff0c;它不但关系到网络用户的隐私&#xff0c;财产&#xff0c;而且关…

服务器补丁管理软件

随着漏洞的不断上升&#xff0c;服务器修补是增强企业网络安全的典型特征。作为业务关键型机器&#xff0c;计划服务器维护的停机时间无疑是一件麻烦事。但是&#xff0c;借助高效的服务器补丁管理软件&#xff08;如 Patch Manager Plus&#xff09;&#xff0c;管理员可以利用…

港联证券:市场有望从2024年起进入大众化折叠屏手机时代

根据Counterpoint Research的近期全球折叠屏智能手机追踪陈述&#xff0c;2023年第二季度全球折叠屏智能手机商场同比添加10%&#xff0c;达到210万部。该增幅与全球智能手机商场形成了鲜明对比&#xff0c;后者在同一季度出货量下降9%&#xff0c;达2.68亿部。估量智能手机商场…

Smtp4dev 虚拟SMTP电子邮件服务

Smtp4dev&#xff08;https://github.com/rnwood/smtp4dev&#xff09;用于开发和测试的虚拟SMTP电子邮件服务器。可以让你在测试应用程序时&#xff0c;无需向真实客户发送邮件&#xff0c;也无需使用特殊配置设置复杂的真实电子邮件服务器 dotnet tool install -g Rnwood.Smt…

Linux 安全 - SUID机制

文章目录 一、文件权限位二、SUID简介 一、文件权限位 &#xff08;1&#xff09; $ ls -l text.txt -rw-rw-r-- 1 yl yl 0 Sep 28 16:25 text.txt其中第一个字段-rw-rw-r–&#xff0c;我们可以把它分为四部分看&#xff1a; -rw-rw-r--&#xff08;1&#xff09;- &a…

Pygame中监控鼠标动作的方法

在Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客中提到&#xff0c;通过在while True循环中获取队列中事件的方法监控键盘动作。监控鼠标动作的方法与监控键盘动作的方法相同。 相关连接1 队列与事件的相关知识&#xff0c;请参考 Pygame中监控键盘按键的方法_pyg…

从技能需求到就业前景,了解前端和后端开发的优缺点和个人选择

文章目录 每日一句正能量一、引言前端开发后端开发 二、两者的对比分析三、技能转换和跨领域工作四&#xff1a;介绍全栈开发后记 每日一句正能量 命运决定的不是你的人生&#xff0c;能决定你人生的只有自己。 一、引言 前端和后端是Web开发中两个不可或缺的领域。前端开发主…

No131.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

vulnhub靶机-DC系列-DC-3

文章目录 信息收集漏洞查找漏洞利用SQL注入John工具密码爆破反弹shell 提权 信息收集 主机扫描 arp-scan -l可以用netdiscover 它是一个主动/被动的ARP 侦查工具。使用Netdiscover工具可以在网络上扫描IP地址,检查在线主机或搜索为它们发送的ARP请求。 netdiscover -r 192.1…

Linux或Centos查看CPU和内存占用情况_top只能查看对应的命令_如何查看具体进程---linux工作笔记062

一般我们都是用top去查看,但是top查看的结果,不能看出,具体是哪个程序占用的,这就很苦恼.. 其实如果有时间的话,再去专门看一下网络安全和linux脚本以及命令方面的,比较系统的看一下比较好.现在积累的都是工作中用到的,比较零散的知识. 如果用top,比如说这里的java,就只能知道…

云服务器租用价格表概览_阿里云腾讯云华为云

云服务器租用价格多少钱一年&#xff1f;阿腾云分享阿里云、腾讯云和华为云的云服务器租用价格表&#xff1a;阿里云2核2G服务器108元一年起、腾讯云2核2G3M带宽轻量服务器95元一年、华为云2核2G3M云耀L实例89元一年起&#xff0c;阿腾云分享更多关于云服务器租用价格明细&…

eNSP网络学习-v05

IP容量 ip地址一共是32位&#xff0c;/24就表示他的网络号是24位。 也就是说共有 2^&#xff08;32-24&#xff09;-2 个主机&#xff08;因为主机为全0和1的保留不用&#xff0c;所以需要减2&#xff09;&#xff0c;共254个ip。 /24&#xff1a;2的8次方-2 &#xff1a;254 …

安达发|APS生产排程软件给化工行业带来的价值

化工行业是一个涵盖了广泛的领域&#xff0c;包括石油化工、有机化工、无机化工、精细化工、生物化工等。 化工行业是指以化学工艺为基础&#xff0c;通过化学反应制取化学品的工业。根据生产工艺和产品性质&#xff0c;化工行业可以分为以下几类&#xff1a; 1. 石油化工&…

Hash Index 原理和应用精讲

线上沙龙 - 技术流第 35 期回放来啦 本期直播我们邀请到 KaiwuDB 高级研发工程师徐胜康&#xff0c;为大家分享 Hash Index 原理和应用。徐老师曾任职于 Sun Micro Systems, Lucent 等公司&#xff0c;具备多年 Linux/UNIX Operating System 内核、驱动、文件系统、数据库、研…

十八,镜面IBL-打印预过滤环境贴图

前面打印了各个级别的hdr环境贴图&#xff0c;也能看到预过滤环境贴图&#xff0c;现在进行打印各个级别的预过滤环境贴图。 运行结果如下 代码如下&#xff1a; #include <osg/TextureCubeMap> #include <osg/TexGen> #include <osg/TexEnvCombine> #…

智慧工地管理系统源码(电脑端+手机端+APP+SAAS云平台)

智慧工地是指通过一系列先进的技术手段&#xff0c;实现施工现场的智能化管理&#xff0c;其核心是利用物联网技术&#xff0c;将施工现场的各种设备、机械、材料、人员等进行全面实时地监测和控制&#xff0c;以实现资源的最优配置和高效利用。 一、概述 智慧工地管理系统&am…

Linux虚拟机无法联网

问题描述 Centos7&#xff0c;配置了静态IP后&#xff0c;无法联网 解决方式 虚拟机连接不上网络&#xff0c;解决办法_虚拟机连不上网络-CSDN博客 根据上面文章一步步做。 发现 在Windows的cmd中&#xff0c;可以ping通我的Linux虚拟机 但是&#xff0c;在虚拟机里 无法 …