
微信小程序实现走马灯式抽奖
来源:
浏览:124
时间:2023-08-10
本文实例为大家分享了微信小程序实现走马灯式抽奖的具体代码,供大家参考,具体内容如下
先来看下效果
设置奖项
awardList是从后台拿到的奖项数组,list不够八位时填充谢谢参与奖项,超过八位时截取数组,然后随机打乱数组,保证奖项随机布局,第四位固定填充立即抽奖按钮
// 设置奖项
settingAward(awardList) {
const len = awardList.length;
const award = {
awardName: '谢谢参与',
awardMoney: 0,
awardType: '00',
awardCode: ''
};
let _awardList = [];
if (len < 8) {
for (let i = 0; i < 8 - len; i++) {
awardList.push(JSON.parse(JSON.stringify(award)));
}
this.randArr(awardList);
_awardList = awardList;
console.log(_awardList)
} else if (awardList.length == 8) _awardList = awardList;
else {
_awardList = awardList.splice(0, 9);
}
_awardList.splice(4, 0, {
awardName: '立即抽奖'
})
return _awardList;
},
// 随机打乱奖项
randArr(arr) {
for (var i = 0; i < arr.length; i++) {
var iRand = parseInt(arr.length * Math.random());
var temp = arr[i];
arr[i] = arr[iRand];
arr[iRand] = temp;
}
return arr;
}
布局
主要用了flex布局,遍历奖品list,index==4时渲染立即抽奖按钮,否则渲染奖项
{{item.awardName}} {{item.awardName}} {{item.awardName}} {{item.awardName}} {{util.formatMoney(item.awardMoney)}} {{item.awardName}}
抽奖逻辑
let cycles = 0;interval = setInterval(frame, 100);index == 8interval = setInterval(frame, 300);
// 开始抽奖
startLuck() {
const idArr = [0, 1, 2, 5, 8, 7, 6, 3];
let cycles = 0;
let that = this;
let _awardList = this.data.awardList;
let index = this.data.currentIndex;
let activityCount = this.data.activityCount - 1;
var interval = setInterval(frame, 100);
this.setData({
lucking: true,
activityCount
})
let pending = true;
post('122201.app', {
duration: 2000,
activityCode: this.data.activityCode
}, {
isMarket: true
}).then(res => {
pending = false;
this.setData({
awardResult: {
awardCode: "",
...res
}
})
}).catch(err => {
clearInterval(interval);
pending = false;
activityCount += 1;
this.setData({
activityCount,
lucking: false,
})
})
function frame() {
if (!pending) {
// 转三圈后跳到获奖位置
if (cycles > 3) {
if (_awardList[that.data.currentIndex].awardCode == that.data.awardResult.awardCode) {
clearInterval(interval);
that.setData({
lucking: false,
showModal: true
})
return;
}
}
}
if (index == 8) {
index = 0;
if (!pending) {
// 两圈后转盘减速
if (cycles++ > 1) {
clearInterval(interval);
interval = setInterval(frame, 300);
}
}
}
// 设置奖项跳到对应位置
that.setData({
currentIndex: idArr[index++]
})
}
},
wxss
.turntable .content {
width: 568rpx;
height: 568rpx;
background: #F48002;
border-radius: 20px;
position: absolute;
top: 90rpx;
left: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-around;
align-items: center;
padding: 10rpx;
box-sizing: border-box;
}
.turntable .content .award {
width: 174rpx;
height: 174rpx;
background: #FFFFFF;
border-radius: 20rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:


