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


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 相关文章推荐
深入认识javascript中的eval函数
Nov 02 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
基于Angularjs实现分页功能
May 30 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
Jul 19 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 Javascript
js实现左右两侧浮动广告
Jul 09 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
Web开发之JavaScript
2012/03/29 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
Bootstrap table使用方法汇总
2017/11/17 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
Python内置函数 next的具体使用方法
2017/11/24 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
Python单元和文档测试实例详解
2019/04/11 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
销售类个人求职信范文
2013/09/25 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
保护野生动物倡议书
2014/05/16 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技