uni-app 分享页制作
读者来稿 · admin与 batype 的 AI 分身对话整理
·67 字 · 约 1 分钟
uni-app 分享页制作#
通过canvas 先制作图。可以做一个canvas 背景在生成一个二维码canvas 图,在将两个canvas 合成一个图片,然后将图片分享出来。
html 模板#
<template>
<view class="content">
<u-icon name='arrow-left' @click="goBack" style="position: absolute; z-index: 999; top: 80rpx; left: 40rpx; font-size: 40rpx; color: #454545;"></u-icon>
<view style="width: 100%; height: calc(100vh - 44px);">
<view class="btn-opate" style="">
<button type="primary" size="mini" @click="saveImg">保存分享</button>
<button type="default" size="mini" @click="copyCode">复制邀请码</button>
</view>
<image class="image" style="width: 100%; height: calc(100vh - 44px);" :src="ImagePath" mode="widthFix"></image>
</view>
<view v-if="show">
<canvas canvas-id="myCanvas" style="width: 100vw; height: 100vh;"></canvas>
<canvas canvas-id="qrcode"></canvas>
</view>
</view>
</template>
二维码制作#
import UQRCode from 'uqrcodejs';
qrCode(){
uni.showLoading({
title: '分享页制作中...'
})
var qr = new UQRCode();
// 设置二维码内容
qr.data = `https://app.xianyuangu.com/#/pages/login/h5login?registerCode=${this.invitationCode}`;
// 设置二维码大小,必须与canvas设置的宽高一致
qr.size = 120;
// 调用制作二维码方法
qr.make();
const context = uni.createCanvasContext('qrcode', this);
qr.canvasContext = context;
// 调用绘制方法将二维码图案绘制到canvas上
qr.drawCanvas();
setTimeout(() => {
// 将canvas内容保存为图片
uni.canvasToTempFilePath({
canvasId: 'qrcode',
success: (res) => {
this.qrcode = res.tempFilePath;
this.drawImageToCanvas();
},
fail: (err) => {
console.error(err);
}
}, this);
}, 1000)
}
绘制图片#
drawImageToCanvas() {
// 获取 canvas 上下文
const systemInfo = uni.getSystemInfoSync();
const canvasWidth = systemInfo.windowWidth;
const canvasHeight = systemInfo.windowHeight;
const context = uni.createCanvasContext('myCanvas', this);
// Step 6: 使用 drawImage 方法绘制图片
context.drawImage('/static/image/share.png', 0, 0, canvasWidth, canvasHeight);
context.setFillStyle('#D43030'); // 黑色文本
context.setFontSize(32); // 文字大小
context.fillText(this.invitationCode, canvasWidth / 2 - 50, canvasHeight / 2 * 0.84);
context.drawImage(
this.qrcode,
canvasWidth / 3 - 20,
canvasHeight / 2,
canvasWidth / 1 ,
canvasWidth / 2
);
context.save();
// Step 7: 调用 draw 方法渲染 canvas
context.draw(true, setTimeout(() => {
// 将canvas内容保存为图片
uni.canvasToTempFilePath({
canvasId: 'myCanvas',
success: (res) => {
this.show = false;
this.ImagePath = res.tempFilePath;
uni.hideLoading();
// 在这里可以将得到的图片路径进行保存或分享等操作
},
fail: (err) => {
uni.hideLoading();
console.error(err);
}
}, this);
}, 1000));
}
保存图片#
env: uni.getSystemInfoSync().uniPlatform;
saveImg(){
// app 保存
if(this.env == 'app') {
uni.saveImageToPhotosAlbum({
filePath: this.ImagePath,
success: function() {
uni.showToast({
title: '保存成功',
})
}
});
} else {
/** 生成一个a元素,并创建一个单击事件 */
let a = document.createElement("a");
a.download = name || "photo"; // 设置图片名称
a.href = this.ImagePath; // 将生成的URL设置为a.href属性
a.setAttribute("id", "myLink");
document.body.appendChild(a);
console.log("链接", a);
this.exportCodeConfirm();
}
},
exportCodeConfirm() {
setTimeout(() => {
let event = new MouseEvent("click");
/** 触发a的单击事件 */
document.getElementById("myLink").dispatchEvent(event);
}, 0);
}