基于vue + elementUI 实现 下载二维码图片, 复制二维码链接到剪贴板, 复制二维码图片到剪贴板功能

1 篇文章 0 订阅
1 篇文章 0 订阅

基于vue + elementUI 实现 下载二维码图片, 复制二维码链接到剪贴板, 复制二维码图片到剪贴板功能

1. 安装依赖
  npm install vue@2.7.16
  npm install element-ui
  npm install vue-clipboard2
  npm install html2canvas
  npm install vue-qr
2. 代码
<template>
    <div class="tip">
        <el-dialog
            title="邀请二维码"
            :visible.sync="dialogVisible"
            width="600px">

            <div class="content">
                <div class="msg">链接地址</div>
                <div class="link">
                    <div class="linkUrl">{{ formMsg.linkUrl }}</div>
                    <el-button type="primary" v-clipboard:copy="formMsg.linkUrl"
                               v-clipboard:success="copySuccess" v-clipboard:error="copyError">复制链接</el-button>
                </div>

                <div class="msg">二维码</div>
                <vue-qr class="qr" :text="formMsg.linkUrl" :value="formMsg.linkUrl" :size="90" :margin="0"></vue-qr>
                <div>
                    <el-button type="text" @click="downImg">下载</el-button>
                    <span class="separator">|</span>
                    <el-button type="text" @click="copyImg">复制</el-button>
                </div>
            </div>
        </el-dialog>
    </div>
</template>

<script>
import VueQr from 'vue-qr'
import html2canvas from 'html2canvas'

export default {
    components: {
        VueQr
    },

    data() {
        return {
            dialogVisible: true,
            formMsg: {
                linkUrl: 'https://baidu.com/'
            }
        }
    },

    methods: {
        copySuccess(e) {
            console.log("copySuccess:", e);
            this.$message.success('复制链接成功!')
        },

        copyError(e) {
            console.log("copyError:", e);
            this.$message.error('复制链接失败!');
        },

        /**
         * 下载二维码图片
         */
        downImg() {
            const img = document.getElementsByClassName('qr')[0]
            html2canvas(img).then((canvas) => {
                const dataUrl = canvas.toDataURL();
                const link = document.createElement('a')
                link.download = '二维码.jpg'
                link.href = dataUrl
                link.style.display = 'none'
                document.body.appendChild(link)
                link.click()
                document.body.removeChild(link)
            })
        },

        /**
         * 复制二维码图片
         */
        copyImg() {
            const img = document.getElementsByClassName('qr')[0]
            html2canvas(img).then((canvas) => {
                // 将canvas转为blob对象
                canvas.toBlob((blob) => {
                    // 将blob对象放入剪切板item中
                    // eslint-disable-next-line no-undef
                    const data = [new ClipboardItem({ [blob.type]: blob })];
                    // 写入剪切板,成功会执行resolve,失败则走reject
                    navigator.clipboard.write(data).then(() => {
                        this.$message({
                            message: '已保存到粘贴板',
                            type: 'success',
                            duration: 1000,
                        });
                    }, () => {
                        this.$message({
                            message: '保存截图失败',
                            type: 'warning',
                            duration: 1000,
                        });
                    });
                }, 'image/png');
            });
        }
    }
}
</script>

实现功能效果如下:

在这里插入图片描述

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值