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


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 相关文章推荐
JS 对象介绍
Jan 20 Javascript
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
Dec 12 Javascript
Javascript处理DOM元素事件实现代码
May 23 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
js的toLowerCase方法用法实例
Jan 27 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
基于AngularJS实现的工资计算器实例
Jun 16 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
react build 后打包发布总结
Aug 24 Javascript
js指定日期增加指定月份的实现方法
Dec 19 Javascript
Vue源码解析之数据响应系统的使用
Apr 24 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
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
js 目录列举函数
2008/11/06 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
浅析JavaScript动画
2015/06/10 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
图片加载完成再执行事件的实例
2017/11/16 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
python Pygame的具体使用讲解
2017/11/03 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
在Python中表示一个对象的方法
2019/06/25 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
Shell如何接收变量输入
2012/09/24 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
节约用水标语
2014/06/11 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
早上好问候语大全
2015/11/10 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫