知识点:
1、点击按钮弹出遮罩层
2、两个图片重叠(分享码与背景图合并)
3、长按保存图片到相册
4、点击按钮开关访问相册权限
图片准备
sharemain.png --分享主图,中间挖空,放小程序码用,底部显示长按小程序码保存图片的按钮图样
sharemain_noshouquan.png --分享主图,中间挖空,放小程序码用,底部放空
close.png --一个打叉关闭按钮
wxml
<button bindtap="share" size="mini"> 分享 </buttom>
<view class="b1" hidden="{{flag}}"> <view class="b2"> <image src="/images/sharemain.png" style="height: 390px;position: absolute; 302px;" wx:if="{{is_shouquan}}"/> <image src="/images/sharemain_noshouquan.png" style="height: 390px;position: absolute; 302px;" wx:else /> <image src="{{url}}" bindlongpress="saveImg" style=" 195px;height: 195px;margin: 100px 54px 54px 59px;"/> </view> <button wx:if="{{!is_shouquan}}" type='primary' size='mini' style="z-index:9999;margin-top:40rpx" open-type="openSetting" bindopensetting='handleSetting'>去授权</button> <view class="t_w" wx:if="{{!is_shouquan}}" style="margin-top:128rpx"> <cover-view class="t_image" bindtap="closeMask"> <cover-image src="/images/icons/close.png"></cover-image> </cover-view> </view> <view class="t_w" wx:else> <cover-view class="t_image" bindtap="closeMask"> <cover-image src="/images/icons/close.png"></cover-image> </cover-view> </view> </view> </view>
js
flag: true,
share(){ var c=this; c.setData({ is_shouquan:1 }) wx.showLoading({ title: '正在生成分享码,请稍后...', mask:true }) wx.cloud.callFunction({ // 要调用的云函数名称 name: 'getUnlimited', data: { shop_id: c.data.shop_id} }).then(res => { c.setData({ url: res['result'][0]['fileID'], flag: false }); wx.hideLoading(); //c.showMask(); }).catch(err => { // handle error console.log(err); wx.hideLoading(); }) }, showMask: function () { var c=this; wx.cloud.callFunction({ // 要调用的云函数名称 name: 'getUnlimited', data: { shop_id: c.data.shop_id } }).then(res => { console.log(res); this.setData({ flag: false }) }).catch(err => { // handle error console.log(err); }) }, closeMask: function () { this.setData({ flag: true }) }, saveImg() { let url = this.data.url; var c=this; //用户需要授权 wx.getSetting({ success: (res) => { if (!res.authSetting['scope.writePhotosAlbum']) { wx.authorize({ scope: 'scope.writePhotosAlbum', success: () => { // 同意授权 this.saveImg1(url); }, fail: (res) => { //authorize:fail auth deny" 用户首次点拒绝 //authorize:fail 系统错误,错误码:-12006,auth deny 用户点了拒绝后除非清缓存(用户删小程序),否则会默认这个选项 //上述两个都要弹出引导说要授权相册 var string = res.errMsg; if (string.indexOf("auth deny")>0) { //用户点了拒绝后,以后都会出现这个错误 //c.handleSetting(c); wx.showModal({ title: '提示', content: '保存图片失败,请点击下方去授权按钮开启相册访问权限再点击保存', showCancel:false, success(res) { if (res.confirm) { c.setData({ is_shouquan:0 }) } } }) } } }) } else { // 已经授权了 this.saveImg1(url); } }, fail: (res) => { console.log(res); } }) }, saveImg1(url){ wx.getImageInfo({ src: url, success: (res) => { let path = res.path; wx.saveImageToPhotosAlbum({ filePath: path, success: function (res) { wx.showToast({ title: '保存成功', image: "../images/nologo.png", duration: 1500, }) }, fail: function (res) { } }) }, fail: (res) => { } }) }, handleSetting: function (e) { let that = this; wx.getSetting({ success(res) { // 对用户的设置进行判断,如果没有授权,即使用户返回到保存页面,显示的也是“去授权”按钮;同意授权之后才显示保存按钮 if (!res.authSetting['scope.writePhotosAlbum']) { wx.showModal({ title: '警告', content: '授权失败,请点击下方去授权按钮开启相册访问权限再点击保存!', showCancel: false }) that.setData({ saveImgBtnHidden: false, openSettingBtnHidden: true }) } else { wx.showModal({ title: '提示', content: '您已授权,请长按小程序码保存图片!', showCancel: false }) that.setData({ saveImgBtnHidden: true, openSettingBtnHidden: false, is_shouquan: 1 }) } } }) },
云函数
函数名:getUnlimited
// 云调用~生成小程序二维码 const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { var shop_id = event.shop_id; try { // 1、通过云调用生成二维码 const result = await cloud.openapi.wxacode.getUnlimited({ page:'pages/页面地址/页面地址', scene: shop_id }) console.log(result) // 2、上传图片到云存储 const upload = await cloud.uploadFile({ cloudPath: 'shopInfo.jpg', fileContent: result.buffer, }) console.log(upload) // 3、返回图片地址 var fileID = upload.fileID; console.log("fileId=" + fileID); const fileList = [fileID]; const imgList = await cloud.getTempFileURL({ fileList: fileList, }) return imgList.fileList } catch (err) { console.log(err) return err } }
wxss
/*弹出分享遮罩层*/ /* 设置背景遮罩层样式 */ .b1 { position: fixed; 100%; height: 100%; top: 0; background: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; flex-direction: column; } /* 设置展示图片大小 */ .b2 { 300px; height: 300px; } /* 设置展示图片与关闭按钮图片的距离 */ .t_w { margin-top: 226rpx; } /* 设置关闭按钮图片显示的大小 */ .b2 image { 100%; height: 100%; z-index:9999; } /* 设置关闭按钮宽高 */ .t_image { 80rpx; height: 80rpx; }