|
| 1 | +let canRoll = true, //加控制,防止用户点击两次 |
| 2 | + num = 1, //用在动画上,让用户在第二次点击的时候可以接着上次转动的角度继续转 |
| 3 | + lotteryArrLen = 0, //放奖品的数组的长度 |
| 4 | + lottery = ['奖品1', '奖品2']; //放奖品 |
| 5 | +Page({ |
| 6 | + data: {}, |
| 7 | + |
| 8 | + onLoad(opt) { |
| 9 | + this.setPlateData(); //执行设置转盘表面的文字 |
| 10 | + let that = this; |
| 11 | + let aniData = wx.createAnimation({ //创建动画对象 |
| 12 | + duration: 2000, |
| 13 | + timingFunction: 'ease' |
| 14 | + }); |
| 15 | + this.aniData = aniData; //将动画对象赋值给this的aniData属性 |
| 16 | + }, |
| 17 | + setPlateData() { //设置奖品数组 |
| 18 | + lotteryArrLen = lottery.length; //获取奖品数组的长度,用来判断 |
| 19 | + if (lotteryArrLen < 2) { //数组的奖品只有一个,扩展数组的长度到4 |
| 20 | + let evenArr = new Array(4); //创建一个数组,方便操作。 |
| 21 | + for (let i = 0; i < 4; i++) { |
| 22 | + if (i % 2 == 1) { //这里为什么要取1是为了在默认的界面将指针放在谢谢的地方,防止别人拿着中奖的截图来要奖品 |
| 23 | + evenArr[i] = lottery[0]; //将原数组的内容赋值到新的数组 |
| 24 | + } else { |
| 25 | + evenArr[i] = '谢谢' //在数组中间隔插入谢谢 |
| 26 | + } |
| 27 | + } |
| 28 | + lottery = [...evenArr]; //将整合好的数组赋值给lottery数组 |
| 29 | + } else { //数组中的奖品超过1个,则正常扩展数组,扩展的数组为原来的2倍 |
| 30 | + let dataLen = 0; //用来放原来数组的索引 |
| 31 | + let evenArr = new Array(lotteryArrLen * 2); //创建扩展数组 |
| 32 | + for (let i = 0; i < (lotteryArrLen * 2); i++) { |
| 33 | + if (i % 2 == 1) { |
| 34 | + evenArr[i] = lottery[dataLen]; //将原来数组的值赋值给新数组 |
| 35 | + dataLen++; //原来数组的索引加一 |
| 36 | + } else { |
| 37 | + evenArr[i] = '谢谢' |
| 38 | + } |
| 39 | + } |
| 40 | + lottery = [...evenArr]; //将整合好的数组赋值给lottery数组 |
| 41 | + } |
| 42 | + |
| 43 | + lotteryArrLen = lottery.length; //获取新的数组长度 |
| 44 | + this.setData({ |
| 45 | + lottery: lottery //设置好值,用于页面展示 |
| 46 | + }) |
| 47 | + }, |
| 48 | + startRollTap() { //开始转盘 |
| 49 | + let that = this; |
| 50 | + if (canRoll) { |
| 51 | + canRoll = false; |
| 52 | + let aniData = this.aniData; //获取this对象上的动画对象 |
| 53 | + let rightNum = ~~(Math.random() * lotteryArrLen); //生成随机数 |
| 54 | + console.log(`随机数是${rightNum}`); |
| 55 | + console.log(`奖品是:${lottery[rightNum]}`); |
| 56 | + aniData.rotate(3600 * num - 360 / lotteryArrLen * rightNum).step(); //设置转动的圈数 |
| 57 | + this.setData({ |
| 58 | + aniData: aniData.export() |
| 59 | + }) |
| 60 | + num++; |
| 61 | + canRoll = true; |
| 62 | + } |
| 63 | + } |
| 64 | +}) |
0 commit comments