微信小程序?qū)崿F(xiàn)九宮格抽獎(jiǎng)
本文實(shí)例為大家分享了微信小程序?qū)崿F(xiàn)九宮格抽獎(jiǎng)的具體代碼,適用于年會(huì)抽獎(jiǎng),供大家參考,具體內(nèi)容如下
效果圖比較卡頓,真實(shí)運(yùn)行效果是旋轉(zhuǎn)的

用到的素材:

實(shí)現(xiàn)步驟:
實(shí)現(xiàn)原理
改變每一項(xiàng)的透明度實(shí)現(xiàn)選中效果。利用setTimeOut時(shí)間使旋轉(zhuǎn)速度越來(lái)越慢。達(dá)到慢慢停止的效果。實(shí)際應(yīng)用中可以將9張獎(jiǎng)品圖片和中獎(jiǎng)項(xiàng)均通過(guò)接口返回。以方便獎(jiǎng)品的調(diào)整。
1.布局繪制
<view class="container">
停止位置:<input value='{{luckPosition}}' style="width:100%;text-align:center" bindinput='input' type='number'></input>
<view class='frame_view'>
<view class='frame_row'>
<image class='frame_item' style='opacity:{{color[0]}}' src='{{images[0]}}'></image>
<image class='frame_item' style='opacity:{{color[1]}}' src='{{images[1]}}'></image>
<image class='frame_item' style='opacity:{{color[2]}}' src='{{images[2]}}'></image>
</view>
<view class='frame_row'>
<image class='frame_item' style='opacity:{{color[7]}}' src='{{images[7]}}'></image>
<image class='frame_item' src='{{btnconfirm}}' bindtap='{{clickLuck}}'></image>
<image class='frame_item' style='opacity:{{color[3]}}' src='{{images[3]}}'></image>
</view>
<view class='frame_row'>
<image class='frame_item' style='opacity:{{color[6]}}' src='{{images[6]}}'></image>
<image class='frame_item' style='opacity:{{color[5]}}' src='{{images[5]}}'></image>
<image class='frame_item' style='opacity:{{color[4]}}' src='{{images[4]}}'></image>
</view>
</view>
</view>
2.數(shù)據(jù)準(zhǔn)備
//計(jì)數(shù)器
var interval = null;
//值越大旋轉(zhuǎn)時(shí)間越長(zhǎng) 即旋轉(zhuǎn)速度
var intime = 50;
data: {
color: [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],
//9張獎(jiǎng)品圖片
images: ['/images/item.png', '/images/item1.png', '/images/item.png', '/images/item1.png', '/images/item.png', '/images/item1.png', '/images/item.png', '/images/item1.png', '/images/item.png'],
//確定按鈕
btnconfirm: '/images/dianjichoujiang.png',
//點(diǎn)擊事件
clickLuck:'clickLuck',
//中獎(jiǎng)位置
luckPosition:0,
},
3.顯示界面時(shí)慢慢轉(zhuǎn)動(dòng)
//進(jìn)入頁(yè)面時(shí)緩慢切換
loadAnimation:function (){
var e = this;
//初始位置為0
var index = 0;
//每1秒鐘切換一次位置
interval = setInterval(function () {
if (index > 7) {
index = 0;
e.data.color[7] = 0.5
} else if (index != 0) {
e.data.color[index - 1] = 0.5
}
e.data.color[index] = 1
e.setData({
color: e.data.color,
})
index++;
}, 1000);
}
4.停止旋轉(zhuǎn)
//which為中獎(jiǎng)位置 需要停止時(shí)調(diào)用該方法
stop: function (which){
var e = this;
//清空計(jì)數(shù)器
clearInterval(interval);
//初始化當(dāng)前位置
var current = -1;
var color = e.data.color;
for (var i = 0; i < color.length; i++) {
if (color[i] == 1) {
current = i;
}
}
//下標(biāo)從1開(kāi)始
var index = current + 1;
e.stopLuck(which, index, intime, 10);
},
/**
* which:中獎(jiǎng)位置
* index:當(dāng)前位置
* time:時(shí)間標(biāo)記
* splittime:每次增加的時(shí)間 值越大減速越快
*/
stopLuck: function (which, index,time,splittime){
var e = this;
//值越大出現(xiàn)中獎(jiǎng)結(jié)果后減速時(shí)間越長(zhǎng)
var color = e.data.color;
setTimeout(function () {
//重置前一個(gè)位置
if (index > 7) {
index = 0;
color[7] = 0.5
} else if (index != 0) {
color[index - 1] = 0.5
}
//當(dāng)前位置為選中狀態(tài)
color[index] = 1
e.setData({
color: color,
})
//如果旋轉(zhuǎn)時(shí)間過(guò)短或者當(dāng)前位置不等于中獎(jiǎng)位置則遞歸執(zhí)行
//直到旋轉(zhuǎn)至中獎(jiǎng)位置
if (time < 400 || index != which){
//越來(lái)越慢
splittime++;
time += splittime;
//當(dāng)前位置+1
index++;
e.stopLuck(which, index, time, splittime);
}else{
//1秒后顯示彈窗
setTimeout(function () {
if (which == 1 || which == 3 || which == 5 || which == 7) {
//中獎(jiǎng)
wx.showModal({
title: '提示',
content: '恭喜中獎(jiǎng)',
showCancel: false,
success: function (res) {
if (res.confirm) {
//設(shè)置按鈕可以點(diǎn)擊
e.setData({
btnconfirm: '/images/dianjichoujiang.png',
clickLuck: 'clickLuck',
})
e.loadAnimation();
}
}
})
} else {
//中獎(jiǎng)
wx.showModal({
title: '提示',
content: '很遺憾未中獎(jiǎng)',
showCancel: false,
success:function(res){
if(res.confirm){
//設(shè)置按鈕可以點(diǎn)擊
e.setData({
btnconfirm: '/images/dianjichoujiang.png',
clickLuck: 'clickLuck',
})
e.loadAnimation();
}
}
})
}
}, 1000);
}
}, time);
},
5.可以點(diǎn)擊按鈕后停止抽獎(jiǎng) 或者點(diǎn)擊開(kāi)始抽獎(jiǎng)停止一段時(shí)候后自動(dòng)停止
//模擬網(wǎng)絡(luò)請(qǐng)求時(shí)間 設(shè)為兩秒
var stoptime = 2000;
setTimeout(function () {
e.stop(e.data.luckPosition);
}, stoptime)
gitub地址:微信小程序九宮格抽獎(jiǎng)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序?qū)崿F(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)
- 微信小程序開(kāi)發(fā)之大轉(zhuǎn)盤(pán) 仿天貓超市抽獎(jiǎng)實(shí)例
- 微信小程序?qū)崿F(xiàn)簡(jiǎn)單九宮格抽獎(jiǎng)
- 微信小程序?qū)崿F(xiàn)走馬燈式抽獎(jiǎng)
- 微信小程序抽獎(jiǎng)組件的使用步驟
- 微信小程序?qū)崿F(xiàn)翻牌抽獎(jiǎng)動(dòng)畫(huà)
- 微信小程序 扭蛋抽獎(jiǎng)機(jī)css3動(dòng)畫(huà)實(shí)現(xiàn)詳解
- 微信小程序?qū)崿F(xiàn)多宮格抽獎(jiǎng)活動(dòng)
- 微信小程序 搖一搖抽獎(jiǎng)簡(jiǎn)單實(shí)例實(shí)現(xiàn)代碼
- 微信小程序轉(zhuǎn)盤(pán)抽獎(jiǎng)的實(shí)現(xiàn)方法
相關(guān)文章
微信小程序?qū)崿F(xiàn)滾動(dòng)Tab選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)滾動(dòng)Tab選項(xiàng)卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法分析
這篇文章主要介紹了JavaScript使用indexOf()實(shí)現(xiàn)數(shù)組去重的方法,結(jié)合實(shí)例形式分析了使用indexOf()方法進(jìn)行數(shù)組的判斷與去重相關(guān)原理與具體操作技巧,需要的朋友可以參考下2018-09-09
小程序多圖列表實(shí)現(xiàn)性能優(yōu)化的方法步驟
這篇文章主要介紹了小程序多圖列表實(shí)現(xiàn)性能優(yōu)化的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
利用JS做網(wǎng)頁(yè)特效_大圖輪播(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇利用JS做網(wǎng)頁(yè)特效_大圖輪播(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Bootstrap 模態(tài)框(Modal)帶參數(shù)傳值實(shí)例
模態(tài)框(Modal)是覆蓋在父窗體上的子窗體。下面通過(guò)本文給大家介紹Bootstrap 模態(tài)框(Modal)帶參數(shù)傳值實(shí)例代碼,需要的朋友參考下吧2017-08-08
js 獲取后臺(tái)的字段 改變 checkbox的被選中的狀態(tài) 代碼
js 獲取后臺(tái)的字段 改變 checkbox的被選中的狀態(tài) 代碼,需要的朋友可以參考一下2013-06-06

