当前位置:   article > 正文

微信小程序-转盘抽奖

微信小程序-转盘抽奖

微信小程序-转盘抽奖代码:

lucky-draw.wxss:

  1. .lucky_draw_zp{ width: 502rpx; height: 502rpx; margin: 0 auto; position: relative;}
  2. .lucky_draw_zp_img , .lucky_draw_zp_btn{ width: 100%; height: 100%; position: absolute; left: 0; top: 0;}

lucky-draw.wxml:

  1. <view class="lucky_draw_zp" bindtap="getLucky">
  2. <image style="{{zpRotateDeg}}" class="lucky_draw_zp_img" src="{{zpData.zpImg}}" mode="aspectFit"></image>
  3. <image class="lucky_draw_zp_btn" src="../../../images/zp_btn.png" mode="aspectFit"></image>
  4. </view>

lucky-draw.js:

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. zpData:{
  7. //转盘主图图片url
  8. zpImg:'../../../images/zp.png',
  9. equalParts:null, //一共多少等份
  10. oneAngle:null, //每一等份多少度
  11. // ******** 转盘奖品数据:后台获取数据 ********
  12. //注:根据转盘图片对应的值(转盘图片指针处顺时针向右数,起始1,奖品对应的格子数【第几等份上】)
  13. awardSetting:[
  14. '第1个格子对应内容',
  15. '第2个格子对应内容',
  16. '第3个格子对应内容',
  17. '第4个格子对应内容',
  18. '第5个格子对应内容',
  19. '第6个格子对应内容',
  20. ],
  21. },
  22. ifRoate:false, //转盘是否在转动(判断阻止多次点击)
  23. zpRotateDeg:'', //旋转角度
  24. // ******** 抽奖结果数据:后台获取数据 ********
  25. curKey:null, //抽奖结果 : 取值范围 1 至 总格子数
  26. ifWinning:null, //是否中奖
  27. },
  28. // 获取转盘初始数据
  29. getZpData(){
  30. let zpImg = 'zpData.zpImg';
  31. let awardSetting = 'zpData.awardSetting';
  32. this.setData({
  33. [zpImg]:'../../../images/zp.png',
  34. [awardSetting]:[
  35. '1',
  36. '2',
  37. '3',
  38. '4',
  39. '5',
  40. '6',
  41. ],
  42. });
  43. this.setZpDefault();
  44. },
  45. // 根据转盘初始数据设置转盘初始关键参数
  46. setZpDefault(){
  47. let equalPartsNum = this.data.zpData.awardSetting.length;
  48. let oneAngleNum = 360 / equalPartsNum;
  49. let equalParts = 'zpData.equalParts';
  50. let oneAngle = 'zpData.oneAngle';
  51. this.setData({
  52. //一共多少等份
  53. [equalParts] : equalPartsNum,
  54. // 根据转盘得等份数设置 每一等份多少度
  55. [oneAngle] : oneAngleNum,
  56. });
  57. },
  58. // 设置旋转动效
  59. setToRotate(degNum){
  60. this.setData({
  61. zpRotateDeg : '-webkit-transform: rotate(' + degNum + 'deg);transform: rotate(' + degNum + 'deg);-webkit-transition: all 5s ease;transition: all 5s ease;',
  62. });
  63. },
  64. //根据 设置的 指针停止时指向的格子(中奖结果),设置其旋转角度区间
  65. setRotate(awardSettingNumber){ //awardSettingNumber 取值范围 1 至 总格子数
  66. setTimeout(() => {
  67. //转盘停止时 指针 指向的格子 最小角度
  68. let minAngle = 360 - awardSettingNumber * this.data.zpData.oneAngle + 5;
  69. //转盘停止时 指针 指向的格子 最大角度
  70. let maxAngle = 360 - (awardSettingNumber - 1) * this.data.zpData.oneAngle - 5;
  71. //旋转区间
  72. let newAngle = Math.floor(minAngle + Math.random() * (maxAngle - minAngle)) + 360 * 15;
  73. this.setToRotate(newAngle);
  74. setTimeout(() => {
  75. this.roateEnd(awardSettingNumber);
  76. }, 5150);
  77. },50);
  78. },
  79. //旋转结束执行
  80. roateEnd(awardSettingNumber){
  81. console.log('当前指向格子数 -- ' + awardSettingNumber , this.data.curKey);
  82. console.log('当前指向格子数对应内容 -- ' + this.data.zpData.awardSetting[awardSettingNumber - 1] , this.data.zpData.awardSetting[this.data.curKey - 1]);
  83. // 是否中奖
  84. if(this.data.ifWinning){
  85. console.log('中奖');
  86. }else{
  87. console.log('未中奖');
  88. }
  89. setTimeout(() => {
  90. this.setData({
  91. ifRoate : false, //转盘是否在转动
  92. });
  93. }, 100);
  94. },
  95. //点击抽奖
  96. getLucky(){
  97. if(this.data.ifRoate){
  98. return false;
  99. }
  100. this.setData({
  101. ifRoate : true, //转盘是否在转动
  102. zpRotateDeg : ''
  103. });
  104. // 请求后台获取抽奖结果中...
  105. /*test*/
  106. var res = {
  107. status:1,
  108. curKey:Math.floor(1 + Math.random() * this.data.zpData.equalParts), //抽奖结果 : 取值范围 1 至 总格子数
  109. ifWinning:true, //是否中奖
  110. info:'没机会或什么什么'
  111. }
  112. /*test*/
  113. /
  114. if(res.status == 1){
  115. this.setData({
  116. curKey : res.curKey,
  117. ifWinning : res.ifWinning
  118. });
  119. this.setRotate(this.data.curKey);
  120. }else{
  121. this.setData({
  122. ifRoate : false, //转盘是否在转动
  123. });
  124. wx.showModal({
  125. title: '温馨提示',
  126. showCancel:false,
  127. content: res.info,
  128. })
  129. }
  130. /
  131. },
  132. /**
  133. * 生命周期函数--监听页面加载
  134. */
  135. onLoad: function (options) {
  136. },
  137. /**
  138. * 生命周期函数--监听页面初次渲染完成
  139. */
  140. onReady: function () {
  141. },
  142. /**
  143. * 生命周期函数--监听页面显示
  144. */
  145. onShow: function () {
  146. this.getZpData();
  147. },
  148. /**
  149. * 生命周期函数--监听页面隐藏
  150. */
  151. onHide: function () {
  152. },
  153. /**
  154. * 生命周期函数--监听页面卸载
  155. */
  156. onUnload: function () {
  157. },
  158. /**
  159. * 页面相关事件处理函数--监听用户下拉动作
  160. */
  161. onPullDownRefresh: function () {
  162. },
  163. /**
  164. * 页面上拉触底事件的处理函数
  165. */
  166. onReachBottom: function () {
  167. },
  168. /**
  169. * 用户点击右上角分享
  170. */
  171. onShareAppMessage: function () {
  172. }
  173. })

图片资源:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/571068
推荐阅读
相关标签
  

闽ICP备14008679号