微信小程序实现九宫格抽奖

本文实例为大家分享了微信小程序实现九宫格抽奖的具体代码,适用于年会抽奖,供大家参考,具体内容如下

效果图比较卡顿,真实运行效果是旋转的

用到的素材:

实现步骤:

实现原理

改变每一项的透明度实现选中效果。利用setTimeOut时间使旋转速度越来越慢。达到慢慢停止的效果。实际应用中可以将9张奖品图片和中奖项均通过接口返回。以方便奖品的调整。 

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.数据准备

//计数器

var interval = null;

//值越大旋转时间越长 即旋转速度

var intime = 50;

data: {

color: [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],

//9张奖品图片

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',

//点击事件

clickLuck:'clickLuck',

//中奖位置

luckPosition:0,

},

3.显示界面时慢慢转动

//进入页面时缓慢切换

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.停止旋转

//which为中奖位置 需要停止时调用该方法

stop: function (which){

var e = this;

//清空计数器

clearInterval(interval);

//初始化当前位置

var current = -1;

var color = e.data.color;

for (var i = 0; i < color.length; i++) {

if (color[i] == 1) {

current = i;

}

}

//下标从1开始

var index = current + 1;

e.stopLuck(which, index, intime, 10);

},

/**

* which:中奖位置

* index:当前位置

* time:时间标记

* splittime:每次增加的时间 值越大减速越快

*/

stopLuck: function (which, index,time,splittime){

var e = this;

//值越大出现中奖结果后减速时间越长

var color = e.data.color;

setTimeout(function () {

//重置前一个位置

if (index > 7) {

index = 0;

color[7] = 0.5

} else if (index != 0) {

color[index - 1] = 0.5

}

//当前位置为选中状态

color[index] = 1

e.setData({

color: color,

})

//如果旋转时间过短或者当前位置不等于中奖位置则递归执行

//直到旋转至中奖位置

if (time < 400 || index != which){

//越来越慢

splittime++;

time += splittime;

//当前位置+1

index++;

e.stopLuck(which, index, time, splittime);

}else{

//1秒后显示弹窗

setTimeout(function () {

if (which == 1 || which == 3 || which == 5 || which == 7) {

//中奖

wx.showModal({

title: '提示',

content: '恭喜中奖',

showCancel: false,

success: function (res) {

if (res.confirm) {

//设置按钮可以点击

e.setData({

btnconfirm: '/images/dianjichoujiang.png',

clickLuck: 'clickLuck',

})

e.loadAnimation();

}

}

})

} else {

//中奖

wx.showModal({

title: '提示',

content: '很遗憾未中奖',

showCancel: false,

success:function(res){

if(res.confirm){

//设置按钮可以点击

e.setData({

btnconfirm: '/images/dianjichoujiang.png',

clickLuck: 'clickLuck',

})

e.loadAnimation();

}

}

})

}

}, 1000);

}

}, time);

},

5.可以点击按钮后停止抽奖  或者点击开始抽奖停止一段时候后自动停止

//模拟网络请求时间 设为两秒

var stoptime = 2000;

setTimeout(function () {

e.stop(e.data.luckPosition);

}, stoptime)

gitub地址:微信小程序九宫格抽奖

以上是 微信小程序实现九宫格抽奖 的全部内容, 来源链接: utcz.com/z/318746.html

回到顶部