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


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替换已存在于element上的event的方法
Mar 09 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
Mar 05 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
AngularJS实现一次监听多个值发生的变化
Aug 31 Javascript
如何使用jquery实现文字上下滚动效果
Oct 12 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
Mar 10 Javascript
VUE中使用Vue-resource完成交互
Jul 21 Javascript
Vue实现购物车场景下的应用
Nov 27 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 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
咖啡语言
2021/03/03 咖啡文化
php minixml详解
2008/07/19 PHP
PHP取进制余数函数代码
2012/01/19 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
javascript定义函数的方法
2010/12/06 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python画双y轴图像的示例代码
2019/07/07 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
中医专业应届生求职信
2013/11/17 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
党委班子对照检查材料
2014/08/19 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
亮剑观后感
2015/06/05 职场文书