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


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 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
jQuery中$.each使用详解
Jan 29 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
在JavaScript中使用JSON数据
Feb 15 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
详解vuex状态管理模式
Nov 01 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
vscode中使用npm安装babel的方法
Aug 02 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
深入解析php之apc
2013/05/15 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
js日期相关函数总结分享
2013/10/15 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python可迭代对象操作示例
2019/05/07 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
解决django FileFIELD的编码问题
2020/03/30 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
阿里云:Aliyun.com
2017/02/15 全球购物
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
新郎新娘婚礼答谢词
2014/01/11 职场文书
学校消防安全责任书
2014/07/23 职场文书
捐书活动倡议书
2015/04/27 职场文书
同步小康驻村工作简报
2015/07/20 职场文书