使用 iview 实现PC端生成推广海报与二维码并下载的功能,基于iview Modal 对话框 与 Carousel 走马灯组件实现

前言:最近在对公司网页进行改版的时候遇到一个问题,需要在PC端实现一个功能,生成三张推广海报和用户邀请链接的二维码,由于有三张推广海报的背景图可供用户选择下载,于是我想到一个实现的方法:点击 “一键生成推广海报” 按钮,弹出一个模态框,里面是一个由三张背景图组成的轮播图,当用户点击"确定"按钮之后,将当前轮播的背景图作为推广海报下载到本地。

1.使用 iview Modal 对话框

<!-- 生成推广海报的按钮 -->
<div class="bill-btn"><Button class="bill" style="height:40px" @click="modal1=true;">一键生成推广海报</Button>
</div>```<!-- 推广海报的模态框 --><Modalv-model="modal1"width="330"@on-ok="ok"@on-cancel="cancel":closable="false"></Modal>

2.在对话框中添加 iview Carousel 走马灯

注意:
1.要给carousel加一个v-if指令,值与控制Modal的booean值绑定,这样carousel就会延迟初始化,不然 carousel 里面的图片会不显示

<!-- 生成推广海报的按钮 -->
<div class="bill-btn"><Button class="bill" style="height:40px" @click="modal1=true;">一键生成推广海报</Button>
</div><Modalv-model="modal1"width="330"@on-ok="ok"@on-cancel="cancel":closable="false"><Carousel v-model="value1" v-if="modal1" :dots="setting.dots"<CarouselItem><div><img src="../../assets/img/Poster1.png" width="100%" height="100%" alt=""> </div></CarouselItem><CarouselItem>  <div><img src="../../assets/img/Poster2.png" width="100%" height="100%" alt=""></div></CarouselItem><CarouselItem><div><img src="../../assets/img/Poster3.png" width="100%" height="100%" alt=""></div></CarouselItem></Carousel></Modal>

3.生成二维码

生成二维码的代码是看了另一位大佬的文章,感谢大佬
以下是原文链接https://blog.csdn.net/zuorishu/article/details/83866234

1.npm安装:npm install qrcanvas

2.并在当前页面引入:import { qrcanvas } from ‘qrcanvas’;

<div class="container"><div class="box" ref="box"><div id="qrcode"></div></div>
</div>

3.以下是js部分

qrcode() {  let qrcode = new QRCode("qrcode", {// 这一行代码是先清空再生成,防止多次点击多次生成document.getElementById("qrcode").innerHTML = "";width: 40, // 设置宽度height: 40, // 设置高度text: this.inviteLink, // 用户的邀请链接});},setQRCode() {this.$nextTick(function() {this.qrcode();});},

4.将二维码与背景图片组合

注意:
1.class名称不同是为了调整不同背景图中二维码的位置
2.id名称不同是为了同时在三张背景图中生成二维码,如果id相同,那么三张背景图中只会在第一张中生成二维码

以下是html部分:

<Carousel v-model="value1" v-if="modal1" :dots="setting.dots"<CarouselItem><div><img src="../../assets/img/Poster1.png" width="100%" height="100%" alt=""> <div class="qrCode1" id="qrcodeFirst" ref="qrcode"></div></div></CarouselItem><CarouselItem>  <div><img src="../../assets/img/Poster2.png" width="100%" height="100%" alt=""><div class="qrCode2" id="qrcodeSecond" ref="qrcode"></div></div></CarouselItem><CarouselItem><div><img src="../../assets/img/Poster3.png" width="100%" height="100%" alt=""><div class="qrCode3" id="qrcodeThird" ref="qrcode"></div></div></CarouselItem></Carousel>

以下是修改后的Js代码部分

qrcode() {document.getElementById("qrcodeFirst").innerHTML = "";document.getElementById("qrcodeSecond").innerHTML = "";document.getElementById("qrcodeThird").innerHTML = "";let qrcode1 = new QRCode("qrcodeFirst", {width: 40, // 设置宽度height: 40, // 设置高度text: this.inviteLink,});let qrcode2 = new QRCode("qrcodeSecond", {width: 40, // 设置宽度height: 40, // 设置高度text: this.inviteLink,});let qrcode3 = new QRCode("qrcodeThird", {width: 40, // 设置宽度height: 40, // 设置高度text: this.inviteLink,});},setQRCode() {this.$nextTick(function() {this.qrcode();});},

5.实现图片下载功能

实现图片下载功能是通过这位大佬的文章实现的,感谢大佬
https://blog.csdn.net/zhongguohaoshaonian/article/details/88891021

以下是代码:

1.遇到的问题:使用了这个方法后截取的图片顶部会出现白边,导致图片内容被往下挤,后来发现了问题,使用方法的时候需要加这一行代码:

window.scrollTo(0, 0);

clickGeneratePicture() {// 注意这一行代码window.scrollTo(0, 0);html2canvas(this.$refs.imageDom).then(canvas => {// 转成图片,生成图片地址this.imgUrl = canvas.toDataURL("../../assets/cs/png");// console.log(this.imgUrl);var eleLink = document.createElement("a");eleLink.href = this.imgUrl; // 转换后的图片地址eleLink.download = "推广海报1";// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);});}

6.功能实现过程

<Modalv-model="modal1"width="330"@on-ok="clickGeneratePicture()"@on-cancel="cancel":closable="false"><Carousel v-model="value1" v-if="modal1" :dots="setting.dots" @on-change="cos(value1)"><CarouselItem><div class="container" ref="imageDom"><img src="../../assets/img/Poster1.png" width="100%" height="100%" alt=""><div class="qrCode1" id="qrcodeFirst" ref="qrcode"></div></div></CarouselItem><CarouselItem>  <div class="container" ref="imageDom"><img src="../../assets/img/Poster2.png" width="100%" height="100%" alt=""><div class="qrCode2" id="qrcodeSecond" ref="qrcode"></div></div></CarouselItem><CarouselItem><div class="container" ref="imageDom"><img src="../../assets/img/Poster3.png" width="100%" height="100%" alt=""><div class="qrCode3" id="qrcodeThird" ref="qrcode"></div></div></CarouselItem></Carousel></Modal>

1.这里遇到的问题:当我点击确定进行下载背景图的时候发现下载下来的图片固定是第三张背景图,也就是说不论我如何切换背景图点击确定,下载下来的都是固定的一张图片,后来我发现原因是三个 div 的 ref 都是 “imageDom”,所以需要不同的命名,于是修改代码

这是修改后的js代码

<Modalv-model="modal1"width="330"@on-ok="clickGeneratePicture()"@on-cancel="cancel":closable="false"><Carousel v-model="value1" v-if="modal1" :dots="setting.dots" @on-change="cos(value1)"><CarouselItem><div class="container" ref="imageDomFirst"><img src="../../assets/img/Poster1.png" width="100%" height="100%" alt=""><div class="qrCode1" id="qrcodeFirst" ref="qrcode"></div></div></CarouselItem><CarouselItem>  <div class="container" ref="imageDomSecond"><img src="../../assets/img/Poster2.png" width="100%" height="100%" alt=""><div class="qrCode2" id="qrcodeSecond" ref="qrcode"></div></div></CarouselItem><CarouselItem><div class="container" ref="imageDomThird"><img src="../../assets/img/Poster3.png" width="100%" height="100%" alt=""><div class="qrCode3" id="qrcodeThird" ref="qrcode"></div></div></CarouselItem></Carousel></Modal>

2.新的问题来了,不同的背景图有不同的 ref ,那么就需要判断当我点击确定的时候当前的背景图是哪一张,这里 iview 的 Carousel组件为我们提供了相关的参数

详见https://www.iviewui.com/components/carousel

也就是说通过当前幻灯片的索引来判断,因为是从 0 开始,于是对js代码进行if判断

需要在 data 中进行初始化设置

data(){return{value1:0}
}
clickGeneratePicture() {window.scrollTo(0, 0);if(this.value1==0){html2canvas(this.$refs.imageDomFirst).then(canvas => {// backgroundColor: null;// 转成图片,生成图片地址this.imgUrl = canvas.toDataURL("../../assets/cs/png");// console.log(this.imgUrl);var eleLink = document.createElement("a");eleLink.href = this.imgUrl; // 转换后的图片地址eleLink.download = "推广海报1";// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);});}else if(this.value1 == 1){html2canvas(this.$refs.imageDomSecond).then(canvas => {// backgroundColor: null;// 转成图片,生成图片地址this.imgUrl = canvas.toDataURL("../../assets/cs/png");// console.log(this.imgUrl);var eleLink = document.createElement("a");eleLink.href = this.imgUrl; // 转换后的图片地址eleLink.download = "推广海报2";// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);});}else{html2canvas(this.$refs.imageDomThird).then(canvas => {// backgroundColor: null;// 转成图片,生成图片地址this.imgUrl = canvas.toDataURL("../../assets/cs/png");// console.log(this.imgUrl);var eleLink = document.createElement("a");eleLink.href = this.imgUrl; // 转换后的图片地址eleLink.download = "推广海报3";// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);});}},

本人前端小白,这是我自己在CSDN上写的第一篇文章,希望能对大家有帮助,文化水平不高,有点啰嗦还请见谅,有不正确的地方还请大家指正,非常感谢!

使用 iview 实现PC端生成推广海报与二维码并下载的功能,基于iview Modal 对话框 与 Carousel 走马灯组件实现相关推荐

  1. java生成二维码 推广海报添加二维码 文字水印 二维码添加LOGO

    前言 场景: 一.推广海报贴上二维码,用户扫码跳转             二.二维码中间贴logo   eg:这里使用展示第一种场景 一.使用工具 Google开源项目ZXing(二维条码编解码). ...

  2. div生成图片_Vue生成分享海报(含二维码)

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 功能需求: 海报有1张背景 ...

  3. .NET生成小程序码,并合自定义背景图生成推广小程序二维码

    前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...

  4. 微信订阅号渠道推广带参数二维码如何生成和统计呢?

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号订阅号渠道推广带参数二维码,公众号功能接口不支持订阅号生成 带参数二维码,只有服务号才可以,订阅号只能通过服务号转接 ...

  5. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码

    最近做的一个项目中,客户要求用asp生成二维码,然后合并到一张背景图片上,合并生成一张推广海报来,可把我愁坏了,经过一个晚上的努力,成功了,下面把这个:asp生成带参数的二维码并合成推广海报,asp合 ...

  6. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码...

    最近做的一个项目中,客户要求用asp生成二维码,然后合并到一张背景图片上,合并生成一张推广海报来,可把我愁坏了,经过一个晚上的努力,成功了,下面把这个:asp生成带参数的二维码并合成推广海报,asp合 ...

  7. 微信生成带参数的二维码,合成海报,扫码后推送小程序?

    微信服务号渠道二维码功能,支持生成带参数二维码,合成海报二维码,微信扫码后推送内容:结合微号帮平台48小时信息推送,推送微信小程序. 带参二维码 海报二维码 微信扫码后回复 48小时信息推送 在微号帮 ...

  8. 魔坊APP项目-15-邀请好友(业务逻辑流程图、服务端提供邀请好友的二维码生成接口、客户端通过第三方识别微信二维码,服务端提供接口允许访问、App配置私有协议,允许第三方应用通过私有协议,唤醒APP)

    邀请好友 1.业务逻辑流程图 客户端提供点击"邀请好友"以后的页面frame,html/invite.html,代码: <!DOCTYPE html> <html ...

  9. 微信渠道推广带参数二维码如何生成和统计呢?

    最近几个朋友,想做微信渠道推广带参数二维码,但是想区分不同渠道的关注来源,以便区分统计和结算粉丝数量.那么,微信渠道推广带参数二维码如何生成和统计呢? 通过微号帮平台实现微信渠道推广带参数二维码,可以 ...

最新文章

  1. python写管理系统-基于Python实现用户管理系统
  2. 超强在线考试系统源码(私有部署二次开发)
  3. 总结一些java编程题的思路
  4. UTF-8格式的文本文件程序读取异常
  5. RTSP鉴权认证之基础认证和摘要认证
  6. 计蒜客——数位反转问题(代码+解析)
  7. C#ListT方法总结
  8. 悬挂缩进 java,WORD上机练习题目
  9. 大数据真实电商数据仓库全流程开发详解
  10. 缅怀:腾讯游戏毛星云(浅墨)突然离世
  11. DSP 6678 多核CACHE一致性操作
  12. 任玉刚【Android开发艺术探索】读后笔记三
  13. win7如何通过电脑系统开启无线热点
  14. 动态生成的chosen实现模糊查询
  15. 【成功解决】Ubuntu下U盘文件夹不存在
  16. execute和submit的区别
  17. 白杨SEO:QQ群SEO是什么?QQ群排名如何做引流与营销?【举例】
  18. TikZ示例——Venn图绘制(机器学习有关概念的关系)
  19. 微信公众号成本分析服务器,分析:为什么微信公众号用户获取成本比App还高?...
  20. maven移除全部依赖写法 exclude

热门文章

  1. 基于 LSTM-Attention 的中文新闻文本分类
  2. 外汇交易与实务--外汇交易基本原理
  3. WEKA进行Apriori、FP-Tree、K-means算法测试
  4. 【数据结构-K】基数排序
  5. ffmpeg中合并音频文件
  6. 堡垒前线7月30日服务器维护,堡垒前线7月24日停服维护公告 全新功能初心岛正式上线...
  7. 全球与中国厂内物流自动化市场深度研究分析报告
  8. 【程序设计】定时任务调度平台需求说明书
  9. SVG—初识4之描边动画和路径动画
  10. OSG笔记一:在Win7、VS2010下配置OSG3.4