首页 > 其他分享 >vue3+js使用canvas实现签字、重签

vue3+js使用canvas实现签字、重签

时间:2024-01-30 14:59:40浏览次数:24  
标签:function canvas const ctx value vue3 重签 绘制

<el-dialog title="签字板" v-model="visible" width="1000px" append-to-body>
            <canvas @mousemove="canvasMove" @mouseup="canvasUp" ref="canvas" width="1000" height="500" @mousedown="mousedown" @mouseleave="canvasLeave"></canvas>
            <template #footer>
                <div class="dialog-footer">
                    <el-button type="primary" @click="handleSave">保 存</el-button>
                    <el-button @click="handleClear">重 置</el-button>
                </div>
            </template>
        </el-dialog>
<script setup>
const visible = ref(false)
const isDown = ref(false) // 是否可以绘制
const canvas = ref(null) // canvas 元素
const ctx = ref(null) // ctx承接上下文

// 鼠标按下
function mousedown (e) {
  let { offsetX, offsetY } = e // 拿到x,y坐标
  ctx.value = canvas.value.getContext('2d') // 上下文
//   console.log(ctx.value)
  ctx.value.strokeStyle = '#000'; // 设置线条颜色
  ctx.value.fillStyle = '#fff'
  ctx.value.lineWidth = 5; // 线条宽度
  ctx.value.beginPath(); // 开始绘制路径
  ctx.value.moveTo(offsetX, offsetY); // 将鼠标移动到某一个坐标,准备绘制
  isDown.value = true // 打开绘制开关
}
// 鼠标移动
function canvasMove (e) {
  let { offsetX, offsetY } = e // 拿到移动时的坐标信息
  isDown.value && startDraw(offsetX, offsetY) // 绘制开关为true 开始绘制
}
// 鼠标松开
function canvasUp() {
  console.log('松开');
  isDown.value = false
}
// 鼠标超出canvas绘制区域
function canvasLeave() {
  console.log('超出canvas');
  isDown.value = false
}
// 绘制方法
function startDraw(x, y) {
  ctx.value.lineTo(x, y); // 绘制线条
  ctx.value.stroke(); // 
}
function handleClear() {
    ctx.value.clearRect(0, 0, 1000, 500)
}
function handleSave() {
    const base64 = canvas.value.toDataURL()
    console.log(base64) // 输出base64的图片地址
}
</script>

 

标签:function,canvas,const,ctx,value,vue3,重签,绘制
From: https://www.cnblogs.com/ai01/p/17997080

相关文章

  • vue3+ts+vite项目中使用vite-plugin-svg-icons插件处理svg
    1.安装依赖:npminstallvite-plugin-svg-icons-D2.vite.config.ts中配置:import{createSvgIconsPlugin}from'vite-plugin-svg-icons'//在exportdefault({command,mode}:ConfigEnv):UserConfig中的plugins数组中添加代码plugins:[createSvgIconsPlugin......
  • vue3使用自定义指令实现图片懒加载
    //自定义指令app.directive('lazy',{mounted(el,binding){//绑定的元素,绑定的值//IntersectionObserver可以用来自动监听元素是否进入了设备的可视区域之内,而不需要频繁的计算来做这个判断constobserve=newIntersectionObserver(([{isIntersec......
  • .NetCore开发人员首选框架---Bridge(Abp-VNext + Vue3)
    bridge系统是基于Abp-VNext+Vue3开发的一套前后端分离的通用权限管理系统,不论是单体服务,还是微服务都可在此基础上自由扩展,此框架组合可以说是集成了.netcore在BS架构领域最前沿的技术,框架简介如下:##......
  • 2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面
    考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写。<templatestyle="width:100%"></template><scriptsetup></script><stylescoped></style>搭建页面的基本框架展开代码后复制你需要的代码。比如我选择上中下这种结构,我就复制上......
  • vue3 解决导航栏和header之间的空白
    vue3解决导航栏和header之间的空白现象如下图所示,导航栏和header之间有白色空隙 解决components\CommonAside.vue修改样式,添加如下代码</style>.el-menu{height:100vh;border-right:none;h3{color:#fff;text-align:center;......
  • 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv
    使用命令行方式搭建uni-app+Vue3+Typescript+Pinia+Vite+TailwindCSS+uv-ui开发脚手架项目代码以上传至码云,项目地址:gitee.com/breezefaith…目录一、前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台......
  • 2024年1月Java项目开发指南10:vite+Vue3项目创建
    新建项目安装routernpminstallvue-router在src下新建目录router,在目录下新建index.js在index.js里面配置路由import{createRouter,createWebHistory}from'vue-router';//定义路由constroutes=[//在这里配置路由];//创建路由实例constrouter=......
  • uniapp-vue3,封装类似于axios的请求方法
    request.jsimport{rootUrl}from"@/config/app-config.js"importhandleCachefrom'@/utils/cache/cache.js';import{showToast}from"@/utils/vant"import{clearAccountInfo}from'@/utils/clear/clear';import......
  • P9697 [GDCPC2023] Canvas(强联通分量)
    题意简述有一个长度为\(n\)的数组\(a\)和\(m\)次操作,\(a_i\)初始为\(0\)。每次操作形如\(l_i,x_i,r_i,y_i\)表示执行\(a_{l_i}\leftarrowx_i,a_{r_i}\leftarrowy_i\),你可以改变\(m\)次操作的执行顺序,求最终\(\sum_{i=1}^na_i\)的最大值,并给出执行操作的顺序。......
  • vue3 父子组件间的数据传递
    一、简介二、实际代码三、问题 一、简介vue父子组件的传递原则是单向的,子组件是无法修改父组件的参数,但是可以通过另一种渠道可以实现通信。       二、实际代码1父传子1.1 props 父组件内容<template><div>这里是父组件</div......