1.安装依赖
npm install --save html2canvas
2.在需要的页面引入
import html2canvas from "html2canvas"
3.script里的代码
import html2canvas from "html2canvas"export default { name: 'promote', data() { return { invitationInfo: {},//获取到的二维码数据 htmlUrl:'',//转为图片(div里的内容转图片) show:false,//组件弹窗控制 isBtnShow:true,//点击按钮是否显示 height:''//dom高度 } }, components:{//引用的vant-vue里的组件 [Button.name]: Button, [Overlay.name]: Overlay, [Icon.name]: Icon, [Loading.name]: Loading }, created() { this.getInvitationCode() }, mounted(){ }, methods: { close(){ this.isBtnShow=false }, getImg(){ this.show=true this.isBtnShow=false setTimeout(()=>{ this.isBtnShow=true this.setImage() },100) }, async setImage () { let dom=document.getElementById("imgUrl") window.pageYoffset = 0; document.documentElement.scrollTop = 0;//如果要转换的dom高度大于屏幕高度,能保证从最顶部开始转图片 document.body.scrollTop = 0;//如果要转换的dom高度大于屏幕高度,能保证从最顶部开始转图片 var width = dom.offsetWidth; //dom宽 var height = dom.offsetHeight; //dom高 var scale = 2; //放大倍数 await html2canvas(dom,{ backgroundColor: null, useCORS: true, // 允许图片跨域 allowTaint:false, scale:scale, dpi: window.devicePixelRatio * 2, width: width, heigth: height, // taintTest: true, // 在渲染前测试图片 timeout:1000 // 加载延时 }).then(canvas => { this.htmlUrl = canvas.toDataURL("image/jpg"); }); }, getInvitationCode() {//获取到接口的二维码 this.$post('二维码的接口地址').then(res => { console.log(res) if (res.code) { Toast(res.msg) return false } this.invitationInfo = res.data }) } }}</script>
4.html代码
<div class="promote-bg" ref="imageTofile" id="imgUrl"> <img src="../../assets/images/pull-new-bg.png" alt=""> <div class="code-bg"> <img src="../../assets/images/pull-new-code.png" alt=""> <div class="code"> <img :src="invitationInfo.qrcode_wx" alt="二维码" > <p>长按识别二维码</p> </div> <div class="wx-code"> <p>邀请码</p> <p class="invitation-code">{{ invitationInfo.inv_code }}</p> </div> </div> <van-button type="primary" class="saveImg" v-if="!isBtnShow">长按可保存图片</van-button></div><van-button type="primary" block @click="getImg" class="setImg">生成海报</van-button> <van-overlay :show="show"> <div class="wrapper" @click.stop> <img :src="htmlUrl" alt="" style="width:100%;height:100%" crossOrigin="anonymous" > <van-icon name="close" class="close" @click="show=false"/> </div></van-overlay>