东风启辰小程序端
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

228 linhas
6.1KB

  1. // pages/guessSecondPoster/guessSecondPoster.js
  2. const app = getApp();
  3. let _savePostBg = "";//用于绘制海报的背景
  4. let _totalDownloadTask = 2;//绘制需要下载的图片总数
  5. let _currentSuccessDownloadTask = 0;//已完成下载的图片数
  6. let windowScale = 0;//屏幕缩放比
  7. let canvasContron = null;//canvas
  8. let posterUrl = "";//合成后的海报路径
  9. let _saveImg = false;
  10. Page({
  11. /**
  12. * 页面的初始数据
  13. */
  14. data: {
  15. imgUrl: app.globalData.urlStatic,//图片路径
  16. selectType:1,//选中的分享类型
  17. userName:"",//用户昵称
  18. qrCodeUrl:"",//用户二维码
  19. prizeLevel:1,//奖品 1:升舱卡,2:百元京东卡
  20. },
  21. /**
  22. * 生命周期函数--监听页面加载
  23. */
  24. onLoad: function (options) {
  25. app.globalData.nowPage = 3;
  26. this.setData({
  27. userName:app.globalData.userInfoData.nickName
  28. })
  29. },
  30. loadFun:function(){
  31. this.getGuessPriceQrCode();
  32. },
  33. /**
  34. * 生命周期函数--监听页面初次渲染完成
  35. */
  36. onReady: function () {
  37. canvasContron = wx.createCanvasContext('myCanvas');
  38. if (app.globalData.openid) {
  39. this.loadFun();
  40. } else {
  41. app.globalData.openidSuccessFuc = this.loadFun;
  42. }
  43. },
  44. /**
  45. * 生命周期函数--监听页面显示
  46. */
  47. onShow: function () {
  48. },
  49. /**
  50. * 生命周期函数--监听页面隐藏
  51. */
  52. onHide: function () {
  53. },
  54. /**
  55. * 生命周期函数--监听页面卸载
  56. */
  57. onUnload: function () {
  58. },
  59. /**
  60. * 页面相关事件处理函数--监听用户下拉动作
  61. */
  62. onPullDownRefresh: function () {
  63. },
  64. /**
  65. * 页面上拉触底事件的处理函数
  66. */
  67. onReachBottom: function () {
  68. },
  69. /**
  70. * 用户点击右上角分享
  71. */
  72. onShareAppMessage: function () {
  73. return {
  74. title: '发现宝藏小程序!我中了'+(this.data.prizeLevel==2?'百元京东卡':'免费升舱大奖')+',来一起探寻更多惊喜吧!',
  75. imageUrl:this.data.imgUrl+'/newImages5/56.jpg',
  76. path: "/pages/guess/guess"
  77. }
  78. },
  79. changeType:function(){//切换分享类型
  80. this.setData({
  81. selectType:this.data.selectType==1?2:1
  82. })
  83. },
  84. getGuessPriceQrCode:function(){//获取竞猜分享小程序码
  85. app.wxRequest(app.globalData.urlRoot + "guessPrice/getGuessPriceQrCode", {}, res => {
  86. if (res.code == 200) {
  87. this.setData({
  88. qrCodeUrl:res.data.qrcodeUrl
  89. })
  90. this.cacheFun();
  91. }
  92. }, this);
  93. },
  94. cacheFun:function(){//缓存所需要的网络图片
  95. wx.getSystemInfo({
  96. success: option => {
  97. windowScale = option.windowWidth / 750;
  98. wx.getImageInfo({//缓存海报背景
  99. src: this.data.imgUrl + '/newImages6/17.png',
  100. success: res => {
  101. _savePostBg = res.path;
  102. _currentSuccessDownloadTask ++;
  103. this.posterDrawing();
  104. }
  105. })
  106. wx.getImageInfo({//缓存二维码
  107. src: this.data.qrCodeUrl,
  108. success: res => {
  109. this.data.qrCodeUrl = res.path;
  110. _currentSuccessDownloadTask++;
  111. this.posterDrawing();
  112. }
  113. })
  114. }
  115. })
  116. },
  117. posterDrawing: function (e) {//海报绘制
  118. //图片尚未下载完成,禁止绘制
  119. if(_currentSuccessDownloadTask < _totalDownloadTask){
  120. return;
  121. }
  122. var ctx = canvasContron;//canvas对象
  123. var scale = windowScale;//屏幕缩放比
  124. //背景
  125. ctx.drawImage(_savePostBg, 0, 0, scale * 750, scale * 1376);
  126. //绘制文字
  127. ctx.setFontSize(scale * 33);
  128. ctx.setFillStyle('#FFFFFF');
  129. ctx.setTextAlign('left');
  130. ctx.fillText(this.data.userName?'@'+this.data.userName:"@", scale * 128, scale *950);
  131. ctx.setFontSize(scale * 27);
  132. ctx.fillText("在猜价活动中,赢得"+(this.data.prizeLevel==1?"免费升舱卡!":"百元京东卡!"), scale * 128, scale *1006);
  133. ctx.fillText("小程序内还有更多惊喜活动,", scale * 128, scale *1045);
  134. ctx.fillText("一起来发现吧!", scale * 128, scale *1085);
  135. //二维码
  136. ctx.drawImage(this.data.qrCodeUrl, scale * 573, scale * 1220, scale * 130, scale * 130);
  137. //绘制
  138. ctx.draw(false, setTimeout(() => {
  139. wx.canvasToTempFilePath({
  140. width:scale*750,
  141. height: scale * 1380,
  142. canvasId: 'myCanvas',
  143. success: res => {
  144. posterUrl = res.tempFilePath;
  145. if(_saveImg){
  146. this.savePic();
  147. }
  148. }
  149. })
  150. }, 300));
  151. },
  152. saveImg: function () {//保存到手机
  153. if (!posterUrl){
  154. wx.showLoading({
  155. title: '海报合成中',
  156. mask:true
  157. })
  158. _saveImg = true;
  159. }else{
  160. this.savePic();
  161. }
  162. },
  163. savePic: function () {
  164. wx.hideLoading();
  165. wx.saveImageToPhotosAlbum({
  166. filePath: posterUrl,
  167. success(res) {
  168. wx.showToast({
  169. title: '保存成功'
  170. })
  171. },
  172. fail: res => {
  173. wx.getSetting({
  174. success: res => {
  175. if (res.authSetting['scope.writePhotosAlbum']) {
  176. wx.showToast({
  177. title: '保存失败',
  178. icon: "none"
  179. })
  180. } else {
  181. wx.showModal({
  182. title: '授权设置',
  183. content: '请授权“保存到相册”',
  184. success: (opt) => {
  185. if (opt.confirm) {
  186. wx.openSetting({
  187. success: e => {
  188. if (e.authSetting['scope.writePhotosAlbum']) {
  189. wx.saveImageToPhotosAlbum({
  190. filePath: posterUrl,
  191. success(res) {
  192. wx.showToast({
  193. title: '保存成功'
  194. })
  195. }
  196. })
  197. } else {
  198. wx.showToast({
  199. title: '授权失败',
  200. icon: "none"
  201. })
  202. }
  203. }
  204. })
  205. }
  206. }
  207. })
  208. }
  209. }
  210. })
  211. }
  212. })
  213. }
  214. })