Vue引入sign-canvas实现签名画板效果

 更新时间:2023年03月27日 10:32:35   作者:HqL丶1024  
这篇文章主要介绍了Vue引入sign-canvas实现签名画板,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Vue引入sign-canvas实现签名画板

效果图

1.安装

npm i sign-canvas --save

2.使用

<template>
    <div>
        <el-card shadow="hover" header="在线签名演示">
            <el-alert
                title="感谢优秀的 `sign-canvas`,项目地址:https://github.com/langyuxiansheng/vue-sign-canvas"
                type="success"
                :closable="false"
                class="mb15"
            ></el-alert>
            <el-button type="primary" size="small" icon="el-icon-edit" @click="onSignCanvasClick">点击进行签名</el-button>
        </el-card>
        <el-dialog title="在线签名" :visible.sync="signVisible" :close-on-click-modal="true" :close-on-press-escape="true" :width="signDialogWidth">
            <sign-canvas class="sign-canvas" ref="SignCanvas" :options="signOptions" v-model="signValue" />
            <div slot="footer" class="dialog-footer">
                <el-button size="small" @click="onCancelSign">取消</el-button>
                <el-button type="danger" size="small" @click="onCanvasClear">清空</el-button>
                <el-button type="primary" size="small" @click="onSaveAsImg">保存</el-button>
            </div>
        </el-dialog>
    </div>
</template>
 
<script>
import SignCanvas from 'sign-canvas';
export default {
    name: 'funSignCanvas',
    components: {
        SignCanvas,
    },
    data() {
        return {
            signVisible: false,
            signDialogWidth: '',
            signValue: '',
            signOptions: {
                lastWriteSpeed: 1,
                lastWriteWidth: 2,
                lineCap: 'round',
                lineJoin: 'round',
                canvasWidth: 729,
                canvasHeight: 460,
                isShowBorder: false,
                bgColor: '#E6E6E6',
                borderWidth: 1,
                borderColor: '#ff787f',
                writeWidth: 5,
                maxWriteWidth: 30,
                minWriteWidth: 5,
                writeColor: '#101010',
                isSign: true,
                imgType: 'png',
            },
        };
    },
    mounted() {
        this.initSignConfig();
        window.addEventListener('resize', this.initSignConfig);
    },
    methods: {
        // 初始化配置信息
        initSignConfig() {
            this.signDialogWidth = `${document.body.offsetWidth / 2 + 40}px`;
            this.signOptions.canvasWidth = document.body.offsetWidth / 2;
            this.signOptions.canvasHeight = document.body.offsetHeight / 2;
        },
        // 打开签名弹窗
        onSignCanvasClick() {
            this.signVisible = true;
        },
        // 取消签名
        onCancelSign() {
            this.signVisible = false;
            this.onCanvasClear();
        },
        // 清空签名
        onCanvasClear() {
            this.$refs.SignCanvas.canvasClear();
        },
        // 保存签名
        onSaveAsImg() {
            const img = this.$refs.SignCanvas.saveAsImg();
            console.log(img);
        },
    },
    destroyed() {
        window.removeEventListener('resize', this.initSignConfig);
    },
};
</script>

3.生成的base64上传服务器

可根据base64转blod上传至服务器

Js图片Base64位转换为blob上传到服务器

//转码方法
function convertBase64UrlToBlob(urlData){
   var localData= 'data:image/png...'; //假定dataUrl为base64位
   let base = atob(localData.substring(localData.indexOf(',') + 1)); // base是将base64编码解码,去掉data:image/png;base64部分
   let length = base.length;
   let url = new Uint8Array(length);
   while (length--) {
       url[length] = base.charCodeAt(length);
   }
   let file = new File([url], 'a.jpg', {
       type: 'image/jpg'
   })
   //最后将file,通过ajax请求做为参数传给服务器就可以了
return file 
}

到此这篇关于Vue引入sign-canvas实现签名画板的文章就介绍到这了,更多相关Vue签名画板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在vue中使用echarts(折线图的demo,markline用法)

    在vue中使用echarts(折线图的demo,markline用法)

    这篇文章主要介绍了在vue中使用echarts(折线图的demo,markline用法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 使用webstorm配置vue+element开发环境

    使用webstorm配置vue+element开发环境

    这篇文章主要介绍了使用webstorm配置vue+element开发环境,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue组件通信方式(父传子、子传父、兄弟通信)

    Vue组件通信方式(父传子、子传父、兄弟通信)

    这篇文章主要介绍了Vue组件通信方式(父传子、子传父、兄弟通信),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue中使用Tailwind CSS的具体方法

    Vue中使用Tailwind CSS的具体方法

    本文主要介绍了Vue中使用Tailwind CSS的具体方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Vuex的使用及知识点笔记

    Vuex的使用及知识点笔记

    这篇文章主要介绍了Vuex的使用及知识点笔记,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 前端vue播放m3u8、flv、mp4视频的方法示例

    前端vue播放m3u8、flv、mp4视频的方法示例

    这篇文章主要给大家介绍了关于前端vue播放m3u8、flv、mp4视频的方法,随着前端大屏页面的逐渐壮大,客户的需求也越来越多,大屏上面展示的事物也越来越丰富,需要的朋友可以参考下
    2023-07-07
  • vue2移动端使用vue-qrcode-reader实现扫一扫功能的步骤

    vue2移动端使用vue-qrcode-reader实现扫一扫功能的步骤

    最近在使用vue开发的h5移动端想要实现一个调用摄像头扫描二维码的功能,所以下面这篇文章主要给大家介绍了关于vue2移动端使用vue-qrcode-reader实现扫一扫功能的相关资料,需要的朋友可以参考下
    2023-06-06
  • vue3+高德地图只展示指定市、区行政区域的地图以及遮罩反向镂空其他地区

    vue3+高德地图只展示指定市、区行政区域的地图以及遮罩反向镂空其他地区

    vue大屏项目开发,客户觉得地图上的文字标注太多了,要求地图上只显示省市等主要城市的标注,这篇文章主要给大家介绍了关于vue3+高德地图只展示指定市、区行政区域的地图以及遮罩反向镂空其他地区的相关资料,需要的朋友可以参考下
    2024-02-02
  • vue3-组合式api-provide/inject详解

    vue3-组合式api-provide/inject详解

    provide/inject 适用于跨级通信,在孙组件中通过依赖注入的方式能获取到父组件中改变的这个值,下面通过实例代码介绍vue3-组合式api-provide/inject的相关知识,需要的朋友可以参考下
    2022-11-11
  • 前端预览pdf文件流详细步骤

    前端预览pdf文件流详细步骤

    公司最近有这么个需求,在线预览pdf功能,正好有点时间,稍微整理记录一下,这篇文章主要给大家介绍了关于前端预览pdf文件流的相关资料,需要的朋友可以参考下
    2023-09-09

最新评论