<template> <view class="content"> <view class="box"> <canvas v-if="showcanvas" id="qrShareBox" canvas-id="qrShareBox" class="tki-qrcode-canvas" /> <image class="imgbox" v-else :src="img"></image> </view> </view> </template> <script> import { weixindata } from '@/utils/wxAuthorized.js'; export default { data() { return { money: '', url: '', img: '', showcanvas: true, loading: true, //是否载入图片中 size: 180, ratio: 1, //页面比例用于计算 canHeight: '', canWeidth: '', playing: true, current: { src: '../../static/audio/xx.mp3' }, rotateIndex: '', animation: {}, animationData: {}, audioAction: { method: 'pause' }, ran: -1, isStop: true, demo: 0, userName: '荆州XXX公司', time: 0, itemName: '', pid: 0 }; }, computed: { showtime() { let date = new Date(this.time * 1000); let Y = date.getFullYear(); let M = date.getMonth()+1 let D = date.getDate() return Y + '年' + M + '月' + D + '日'; } }, onReady() { let query = uni.createSelectorQuery(); let obj = this; console.log(999, obj.money); // 获取页面比例 query .select('.box') .fields( { size: true }, e => { console.log('获取页面比例', e); // 保存比例 this.ratio = e.width / 750; } ) .exec(); // 获取画布宽高信息 query .select('#qrShareBox') .fields( { size: true }, e => { console.log('获取画布宽高信息', e); obj.canHeight = e.height; // obj.canHeight = 650 obj.canWeidth = e.width; } ) .exec(); let ctxBg = '/static/img/zszs.png'; //画布背景 let src = '/static/icon/erweima.jpg'; // 二维码 let context = uni.createCanvasContext('qrShareBox'); // 插入背景图片 console.log('插入背景图片', ctxBg, 0, 0, obj.canWeidth, obj.canHeight); context.drawImage(ctxBg, 0, 0, obj.canWeidth, obj.canHeight); const codeSize = obj.size * obj.ratio; //计算二维码大小 const codeX = ((750 - obj.size) * obj.ratio) / 2; //二维码所在x轴位置 const codeY = 960 * obj.ratio; //二维码所在y轴位置 const codeBoxColor = '#FFFFFF'; //包裹框颜色 const codeBoxWidht = 0; //包裹边框宽度 const codeBoxSize = (codeBoxWidht / 2) * obj.ratio; //计算二维码白色包裹框大小 const codeBoxX = codeX - codeBoxSize; //包裹框初始X轴 const codeBoxY = codeY - codeBoxSize; //包裹框初始Y轴 const codeBoxEnd = codeSize + codeBoxWidht * obj.ratio; //计算包裹框大小 const fontTop = codeY + codeBoxEnd + (codeBoxWidht + 20) * obj.ratio; //文字距离上边距高度 const fontSize = 24 * obj.ratio; //文字大小 const fontText = ''; //文字内容 const fontLeft = (codeSize - fontSize * fontText.length) / 2 + codeX; //文字左侧距离 // // 插入文字 context.setFontSize(38* obj.ratio); context.setFillStyle('#000'); // context.fillText('感谢信', ((750 - obj.size) * obj.ratio) / 2, 260 * obj.ratio) context.setFontSize(40 * obj.ratio); context.fillText('感谢 ' , 100 * obj.ratio, 460* obj.ratio) let name = obj.userName if(name.length <= 12) { context.fillText(name, 200* obj.ratio, 460* obj.ratio) }else if(name.length <= 18) { let name1 = name.slice(0,9) let name2 = name.slice(9,) context.fillText(name1, 200* obj.ratio, 434* obj.ratio) context.setTextAlign('center') context.fillText(name2, 380* obj.ratio, 483* obj.ratio) context.setTextAlign('left') }else if(name.length <= 24) { let name1 = name.slice(0,12) let name2 = name.slice(12,) context.fillText(name1, 200* obj.ratio, 434* obj.ratio) context.setTextAlign('center') context.fillText(name2, 438* obj.ratio, 483* obj.ratio) context.setTextAlign('left') }else if(name.length <= 30) { let name1 = name.slice(0,12) let name2 = name.slice(12,22) let name3 = name.slice(22,) context.fillText(name1, 200* obj.ratio, 400* obj.ratio) context.setTextAlign('center') context.fillText(name2, 438* obj.ratio, 450* obj.ratio) context.fillText(name3, 438* obj.ratio, 500* obj.ratio) context.setTextAlign('left') }else if(name.length <= 36) { let name1 = name.slice(0,12) let name2 = name.slice(12,24) let name3 = name.slice(24,) context.fillText(name1, 200* obj.ratio, 400* obj.ratio) context.setTextAlign('center') context.fillText(name2, 438* obj.ratio, 450* obj.ratio) context.fillText(name3, 438* obj.ratio, 500* obj.ratio) context.setTextAlign('left') } context.setFontSize(38 * obj.ratio); context.fillText("感谢您于" + obj.showtime + "对", 180* obj.ratio, 560* obj.ratio) let str = '“' + obj.itemName + "”" + '的爱心捐赠。' if(str.length < 15) { context.fillText(str ,90* obj.ratio, 615* obj.ratio ) context.setTextAlign('center') context.fillText('特发此证书,以示感谢!',(750/2)* obj.ratio,695 * obj.ratio) context.setTextAlign('left') }else if(str.length < 30) { if(str.length == 17) { context.fillText(str ,85* obj.ratio, 615* obj.ratio ) context.setTextAlign('center') context.fillText('特发此证书,以示感谢!',(750/2)* obj.ratio,695 * obj.ratio) context.setTextAlign('left') }else { let str1 = str.slice(0,16) let str2 = str.slice(16,) context.fillText(str1 ,85* obj.ratio, 615* obj.ratio ) context.fillText(str2 ,100* obj.ratio, 670* obj.ratio ) context.setTextAlign('center') context.fillText('特发此证书,以示感谢!',(750/2)* obj.ratio,750 * obj.ratio) context.setTextAlign('left') } }else if(str.length < 48) { let str1 = str.slice(0,16) let str2 = str.slice(16,31) let str3 = str.slice(31,) context.fillText(str1 ,85* obj.ratio, 615* obj.ratio ) context.fillText(str2 ,100* obj.ratio, 670* obj.ratio ) context.fillText(str3 ,100* obj.ratio, 725* obj.ratio ) context.setTextAlign('center') context.fillText('特发此证书,以示感谢!',(750/2)* obj.ratio,805 * obj.ratio) context.setTextAlign('left') }else if(str.length < 63) { let str1 = str.slice(0,16) let str2 = str.slice(16,31) let str3 = str.slice(31,46) let str4 = str.slice(46,) context.fillText(str1 ,85* obj.ratio, 615* obj.ratio ) context.fillText(str2 ,100* obj.ratio, 670* obj.ratio ) context.fillText(str3 ,100* obj.ratio, 725* obj.ratio ) context.fillText(str4 ,100* obj.ratio, 780* obj.ratio ) context.setTextAlign('center') context.fillText('特发此证书,以示感谢!',(750/2)* obj.ratio,860 * obj.ratio) context.setTextAlign('left') } context.drawImage(src, 490 * obj.ratio, 1140 * obj.ratio, codeSize, codeSize); // 生成 context.draw(false, e => { uni.canvasToTempFilePath({ x: 0, y: 0, width: obj.canWeidth, height: obj.canHeight, destWidth: obj.canWeidth, destHeight: obj.canHeight, canvasId: 'qrShareBox', success: function(res) { console.log(333, res); // 在H5平台下,tempFilePath 为 base64 obj.showcanvas = false; obj.img = res.tempFilePath; } }); }); }, onShow() { }, onLoad(option) { this.pid = option.project_id this.userName = option.name this.time = option.time this.itemName = option.title this.IndexShare() }, onHide() { //在页面隐藏时也要清除定时器 if (this.timer) { // console.log('清除定时器-' + this.timer) clearInterval(this.timer); } }, onUnload() { }, methods: { // 分享 IndexShare() { let obj = this; let item = { link: obj.$store.state.baseURL + '/index/#/pages/user/thank?project_id=' + obj.pid + '&name=' + obj.userName + '&time=' + obj.time + '&title=' + obj.itemName, // 分享链接 imgUrl: obj.$store.state.baseURL + '/index/static/img/22.jpg', desc: '感谢信', title: '赤壁市红十字会', success: console.log('分享加载成功') }; console.log('分享加', item); weixindata(item); }, musicClick() { // if (this.isRoate) { // this.isRoate = false // this.stopScanAudio() // } else { // this.isRoate = true // this.ScanAudio() // } }, play() { this.playing = !this.playing; this.ScanAudio(this.playing); if (this.playing == true) { this.timer = setInterval(() => { //创建定时器,3秒执行异一次 this.scaleAndScale(); console.log('每1秒执行一次'); }, 1000); } else { clearInterval(this.timer); } // var music = uni.createInnerAudioContext(); // music.src= "../../static/audio/xx.mp3"; //选择播放的音频 // music.onPause(); //暂停播放 // console.log('暂停播放') // console.log('dianjizanting') // this.stopAudio() // this.playing = !this.playing; //背景音乐点击,暂停或继续 }, // 定义动画内容 scaleAndScale() { // 定义动画内容 // this.animation.scale(1.2, 1.2).step() //先放大1,2倍 // this.animation.scale(1, 1).step() //缩小至原来的大小 // 导出动画数据传递给data层 // this.animationData = this.animation.export(); //每次执行导出动画时 会覆盖之前的动画 this.animation.rotate(this.demo).step({ duration: 1000 }); this.animationData = this.animation.export(); this.demo += 360; }, noscaleAndScale() { this.animation.rotate(0).step({ duration: 1000 }); this.animationData = this.animation.export(); } // ScanAudio(){ // this.$api.music.play(); //执行播放 // console.log('执行播放') // } } }; </script> <style lang="scss"> page { width: 100%; height: 100%; } .content { // background-color: pink; width: 100%; // height: 100vh; position: relative; // overflow: hidden; .image { width: 100%; height: 100vh; } .bgimg { width: 100%; height: 100%; // background-color: pink; image { width: 100%; height: 100%; } } // .tki-qrcode-canvas { // width: 750rpx; // height: 100vh; // margin: 0 auto; // // background-color: pink; // } .box { color: #ffffff; width: 100%; height: 100vh; .tki-qrcode-canvas { // width: 700rpx; // height: 1245rpx; width: 750rpx; // padding: 32rpx; height: 1350rpx; margin: 0 auto; } // background-color: pink; // .music { // // width: 55rpx; // // height: 55rpx; // border-radius: 28rpx; // // background-color: pink; // position: absolute; // left: 12rpx; // top: 250rpx; // z-index: 999; // } } .imgbox { height: 1334rpx; width: 750rpx; } } .image { width: 100%; height: 100%; } </style>