微信小程序,当字数不确定时的右移

wxml:<scroll-view class="warp_" scroll-y="true"> <view style=‘‘ style=position: absolute;z-index: 2;top:0;left:0;right:0;> <canvas canvas-id="myCanvas" style="width:{{335 * rpx}}px;height:{{580 * rpx}}px;margin: 30rpx auto 50rpx;"/> <cover-view style=padding-bottom: 0;box-sizing: border-box;background:#fff;position: fixed;bottom:0;left:0;width:100%;z-index:9999> <!-- <cover-view class="tit f28">海报模板</cover-view> <cover-view class=pageNav bWhite flex f24 center gridXb> <cover-view class="pageLi sub pr" data-index="{{index}}" catchtap="changeBg" wx:key="" wx:for="{{pageNav}}"> <cover-view class="text pr {{index==active?‘active‘:‘‘}} "> <cover-image class="pageLiImg" src="/image/close2.png"></cover-image> </cover-view> <cover-view class="pageBox"> {{item.title}} </cover-view> </cover-view> </cover-view> --> <cover-view bindtap=saveImg class=btn>保存图片</cover-view> </cover-view> </view> <view class=pop_bg_fix></view> <!-- </view> --></scroll-view>

 

wxss:.warp_{width: 100vw;height: 100vh;box-sizing: border-box;line-height: 1.5;position: fixed;top: 0;left: 0;z-index: 9999991;background: #fff;}

 

wxjs:// pages/newPage/haoBao/index.jsconst app = getApp()Page({ /** * 页面的初始数据 */ data: { pageNav: [ { title: 简约白, color: #fff, img: ‘‘, iocn: /image/iocn60.png }, { title: 西瓜红, color: #fd8866, img: /image/topBg3.png, iocn: /image/iocn60.png }, { title: 天空蓝, color: #e5f2fb, img: /image/topBg4.png, iocn: /image/iocn59.png, ac: 1 }, { title: 胭脂粉, color: #fcdee3, img: /image/topBg2.png, iocn: /image/iocn62.png }, { title: 薰衣草, color: #ebdefb, img: /image/topBg.png, iocn: /image/iocn61.png }, { title: 豆沙绿, color: #a6e7de, img: /image/topBg5.png, iocn: /image/iocn63.png } ], active: 0, wx_avatar_url: ‘‘, userinfo: [], index2:0, walk_km: 0, walk_sumk: 0, walk_left:0 }, //获取encryptedData(没有解密的步数)和iv(加密算法的初始向量) myWalk: function(e) { let that = this that.pushRQId = null console.log(that.pushRQId) if (app.HTTP.isLoading(that.pushRQId)) return console.log(walk) let formid = e.detail.formId wx.checkSession({ success() { // session_key 未过期,并且在本生命周期一直有效 }, fail() { wx.clearStorageSync() } }) wx.getSetting({ success: function(res) { console.log(res); if (!res.authSetting[scope.werun]) { wx.showModal({ title: 提示, content: 获取微信运动步数,需要开启计步权限, success: function(res) { if (res.confirm) { //跳转去设置 wx.openSetting({ success: function(res) { wx.getWeRunData({ success: function(res2) { that.pushRQId = app.HTTP.post(app.URL.userinfo_url, { iv: res2.iv, encryptedData: res2.encryptedData, m: mywalk, city: app.globalData.city, formid: formid }, (res) => { //console.log(res); return  let arr_top3 = []; if (res.walkrank.length > 0) { arr_top3 = res.walkrank.splice(0, 3) } wx.setStorageSync(user_info, res.user) that.setData({ walk_step: res.step, walk_sum: res.stepsum, walk_sumk: (res.stepsum * 0.75 * 0.001).toFixed(1), walk_km: (res.step * 0.75 * 0.001).toFixed(1), walk_top3: arr_top3, walk_rank: res.walkrank, userscore: res.user.score }) wx.showToast({ title: 同步成功, }) }) }, fail: function(res) { wx.showModal({ title: 提示, content: 开发者未开通微信运动,请关注“微信运动”公众号后重试, showCancel: false, confirmText: 知道了 }) } }) } }) } else { //不设置 } } }) } else { wx.getWeRunData({ success: function(res2) { console.log(res2) that.pushRQId = app.HTTP.post(app.URL.userinfo_url, { iv: res2.iv, encryptedData: res2.encryptedData, appid: app.URL.app_id, m: mywalk, city: app.globalData.city, formid: formid }, (res) => { // console.log(res); return  let arr_top3 = []; if (res.walkrank.length > 0) { arr_top3 = res.walkrank.splice(0, 3) } wx.setStorageSync(user_info, res.user) that.setData({ walk_step: res.step, walk_sum: res.stepsum, walk_sumk: (res.stepsum * 0.75 * 0.001).toFixed(1), walk_km: (res.step * 0.75 * 0.001).toFixed(1), walk_top3: arr_top3, walk_rank: res.walkrank, userscore: res.user.score }) wx.showToast({ title: 同步成功, }) }) }, fail: function(res) { wx.showModal({ title: 提示, content: 请关注“微信运动”公众号后重试, showCancel: false, confirmText: 知道了 }) } }) } } }) }, //选择背景色 changeBg: function(e) { var that = this let p = e.currentTarget.dataset that.data.pageNav[p.index][color] // console.log(that.data.pageNav[p.index][‘color‘]) that.setData({ color: that.data.pageNav[p.index][color], img: that.data.pageNav[p.index][img], iocn: that.data.pageNav[p.index][iocn], active: p.index }) that.canvasImg() }, canvasImg() { let that = this; var ress = wx.getSystemInfoSync() var rpx = ress.windowWidth / 375 that.setData({ rpx: ress.windowWidth / 375 }) const ctx = wx.createCanvasContext(myCanvas); ctx.setFillStyle(#fff); //为创建的canvans上下文添充颜色 如果没有设置 fillStyle,默认颜色为 black。 ctx.fillRect(0, 0, 335 * rpx, 580 * rpx) // ctx.setFillStyle(‘#d5313a‘); //为创建的canvans上下文添充颜色 如果没有设置 fillStyle,默认颜色为 black。 // ctx.fillRect(20 * rpx, 100 * rpx, 295 * rpx, 350 * rpx) ctx.drawImage(that.data.headimgurls, 0 * rpx, 0 * rpx, 335 * rpx, 335 * rpx); //ctx.drawImage(that.data.bgWhite, 20 * rpx, 400 * rpx, 295 * rpx, 180 * rpx); ctx.save(); // 先保存状态 已便于画完圆再用 ctx.beginPath(); //开始绘制 //先画个圆 ctx.arc(38 * rpx, 374 * rpx, 25 * rpx, 0, Math.PI * 2, false); //false代表顺时针 图片的位置加半径 ctx.setStrokeStyle(#fff) ctx.stroke(); ctx.clip();//画了圆 再剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 ctx.drawImage(that.data.headimgurl, 13 * rpx, 348 * rpx, 50 * rpx, 50 * rpx); // 推进去图片 ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下文即状态 可以继续绘制 ctx.setFillStyle("#999"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(that.data.user.nickname+向您推荐了一个好东西!, 76 * rpx, 380 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(今天我走了, 13 * rpx, 430 * rpx); ctx.setFillStyle("#f03725"); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.setFontSize(18 * rpx); ctx.fillText(that.data.users.walkstep+‘‘, 82 * rpx, 430 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(步,, (that.data.users.walkstep.toString().length*11+80) * rpx, 430 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(共走了, (that.data.users.walkstep.toString().length*11+110) * rpx, 430 * rpx); ctx.setFillStyle("#f03725"); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.setFontSize(18 * rpx); ctx.fillText(that.data.walk_km+‘‘, (that.data.users.walksteps.toString().length*11+118+that.data.walk_sumk.toString().length*11) * rpx, 430 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(公里, (that.data.users.walksteps.toString().length*11+110+that.data.walk_sumk.toString().length*11*2) * rpx, 430 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(总里程距离, 13 * rpx, 460 * rpx); ctx.setFillStyle("#f03725"); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.setFontSize(18 * rpx); ctx.fillText(that.data.users.walksteps+‘‘, 82 * rpx, 460 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(步,, (that.data.users.walksteps.toString().length*11+80) * rpx, 460 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(总共打卡, (that.data.users.walksteps.toString().length*11+110) * rpx, 460 * rpx); ctx.setFillStyle("#f03725"); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.setFontSize(18 * rpx); ctx.fillText(that.data.signnum+‘‘, (that.data.users.walksteps.toString().length*11+155+that.data.signnum.toString().length*11) * rpx, 460 * rpx); ctx.setFillStyle("#3D3D3D"); ctx.setFontSize(14 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(, (that.data.users.walksteps.toString().length*11+112+that.data.walk_sumk.toString().length*11*2) * rpx,460 * rpx); ctx.setFillStyle(#f5f5f5) ctx.fillRect(13* rpx, 480 * rpx, 310 * rpx, 90 * rpx) ctx.drawImage(that.data.code,26 * rpx, 496 * rpx, 60 * rpx, 60 * rpx); ctx.setFillStyle("#333"); ctx.setFontSize(12 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(that.data.user.nickname, 100 * rpx, 526 * rpx); ctx.drawImage("/image/add.png", 140 * rpx, 516 * rpx, 12 * rpx, 12 * rpx) ctx.setFillStyle("#333"); ctx.setFontSize(12 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(that.data.user.cityname, 156 * rpx, 526 * rpx); ctx.setFillStyle("#333"); ctx.setFontSize(12 * rpx); //字大小 ctx.setTextAlign(left); //是否居中显示,参考点画布中线 ctx.fillText(平台担保交易,一键提现到账, 100 * rpx, 546 * rpx); ctx.draw(); }, saveImg() { let that = this; var res = wx.getSystemInfoSync() var rpx = res.windowWidth / 375 that.setData({ rpx: res.windowWidth / 375 }) wx.canvasToTempFilePath({ x: 0, y: 0, width: 335 * rpx, //画布宽高 height: 580 * rpx, destWidth: 1005 * rpx, //画布宽高*dpr 以iphone6为准 destHeight: 1740 * rpx, //放大2倍以上,解决保存的图片模糊的问题 canvasId: myCanvas, success: function (res) { console.log(res.tempFilePath) //生成的临时图片路径 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (res) { console.log(res); wx.showToast({ title: 保存成功, }) }, fail: function () { console.log(a) } }) } }) }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this._getUserinfo(); }, _getUserinfo: function () { let that = this app.HTTP.post(app.URL.userinfo_url, { m: homeShare, city: app.globalData.city }, (info) => { wx.setStorageSync(user_info, info.userinfo) that.setData({ signnum: info.signnum, walk_step: parseInt(info.walkstep), walk_sum: info.walksteps, walk_sumk: (info.walksteps * 0.75 * 0.001).toFixed(1), walk_km: (parseInt(info.walkstep) * 0.75 * 0.001).toFixed(1), users: info, user: info.userinfo, userImg: info.share_imgs }) wx.downloadFile({ url: info.userinfo.headimgurl, success: function (res2) { that.setData({ headimgurl: res2.tempFilePath }); let _suid = `user_id=${that.data.user.uid}`; let _page = "pages/newPage/idx/index"; // that._getFxcode(_page, _suid); //that.canvasImg();  } }) wx.downloadFile({ url: info.share_imgs[0].img, success: function (res2) { that.setData({ headimgurls: res2.tempFilePath }); } }) }) }, _getFxcode: function (_page, _scene) { let that = this app.HTTP.post(app.URL.hao_bao_home, { //m: "getQrcode", page: _page, param: _scene, }, (res) => { wx.downloadFile({ url: res.url, success: function (res2) { that.setData({ code: res2.tempFilePath }); that.canvasImg(); } }) }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { }})

技术图片

相关文章