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


Posted in Javascript onApril 15, 2020

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

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

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

用到的素材:

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

实现步骤:

实现原理

改变每一项的透明度实现选中效果。利用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地址:微信小程序九宫格抽奖

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
分享10个原生JavaScript技巧
Apr 20 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
Feb 10 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
Vue中对比scoped css和css module的区别
May 17 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
微信小程序顶部导航栏可滑动并选中放大
Dec 05 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 #Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 #Javascript
微信小程序使用map组件实现解析经纬度功能示例
Jan 22 #Javascript
微信小程序全局变量功能与用法详解
Jan 22 #Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 #Javascript
JavaScript JMap类定义与使用方法示例
Jan 22 #Javascript
vue2.0 如何在hash模式下实现微信分享
Jan 22 #Javascript
You might like
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Javascript----文件操作
2007/01/18 Javascript
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
如何提高数据访问速度
2016/12/26 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
临床医师个人自我评价
2014/04/06 职场文书
厕所文明标语
2014/06/11 职场文书
环保志愿者活动总结
2014/06/27 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
辞职信格式模板
2015/02/27 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
工作服管理制度范本
2015/08/06 职场文书
珍爱生命主题班会
2015/08/13 职场文书
高一化学教学反思
2016/02/22 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫