vue组件实现移动端九宫格转盘抽奖


Posted in Javascript onOctober 16, 2020

本文实例为大家分享了vue组件实现移动端九宫格转盘抽奖的具体代码,供大家参考,具体内容如下

vue-lucky-draw

移动端九宫格转盘抽奖vue组件,中奖的奖品数据由接口决定。

效果图

vue组件实现移动端九宫格转盘抽奖

抽奖

因为中奖的结果是后台返回的,所以要考虑转盘的最终停下来的位置必须是在对应后台返回结果的奖品的位置,也就是要模拟出这个中奖的过程(所以所谓的抽奖都是骗人的,嘿嘿)。先要写出移动的背景框对应的各个位置的css,然后动态切换class来使其呈现出转动效果。明白了过程就好写了。

中间的按钮用的是css3的animation,我这个奖品是合在了一张图上,你也可以分开成8张小图,那样需要写更多的样式。

// 抽奖
 handleStart() {
 if (this.isRuningLucky) {
  return Toast("正在抽奖中...");
 }
 if (isNaN(Number(this.initSpeed))) {
  return false;
 }
 this.speed = this.initSpeed;
 // 开始抽奖
 this.isRuningLucky = true;
 this.time = Date.now();
 this.drawAward();
 Toast("开始抽奖");
 },
 drawAward() {
 // 请求接口,模拟一个抽奖数据(假设请求时间为2s)
 setTimeout(() => {
  this.award = {
  id: "4"
  };
  console.log("返回的抽奖结果是", this.award);
 }, 2000);
 this.move();
 },
 move() {
 let timer = setTimeout(() => {
  this.current++;
  if (this.current > 7) {
  this.current = 0;
  }
  // 若抽中的奖品id存在,则开始减速转动
  if (this.award.id && (Date.now() - this.time) / 1000 > 2) {
  console.log("奖品出来了");
  this.speed += this.diff; // 转动减速
  
  // 若转动时间超过4秒,并且奖品id等于小格子的奖品id,则停下来
  if (
   (Date.now() - this.time) / 1000 > 4 &&
   this.award.id == this.awards[this.current].id
  ) {
   clearTimeout(timer);

   setTimeout(() => {
   this.isRuningLucky = false;
   // 这里写停下来要执行的操作(弹出奖品框)
   Toast(
    "您抽中的奖品是" + this.awards[this.current].name + ",奖品id是" + this.awards[this.current].id
   );
   }, 400);
   return;
  }

  // 若抽中的奖品不存在,则加速转动
  } else {
  if (this.speed >= 50) {
   this.speed -= this.diff; // 转动加速
  }
  }

  this.move();
 }, this.speed);
 },

号码滚动

使用无序列表将号码列表(正常是从接口获取)循环出来,通过设置定时以及控制transition的属性,来达到无缝连接的效果。如果样式(li高度)改变的话,需要对定时器时间进行调节(控制下一个显示的时间)。

// 中奖名单滚动
 scroll() {
 this.animate = true;
 let timer = setTimeout(() => {
  this.list.push(this.list[0]);
  this.list.shift();
  this.animate = false;
 }, 500);
 }

功能代码请移步到我的GitHub
可以clone项目 npm i , npm run dev,喜欢的话点个星吧_~

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

Javascript 相关文章推荐
页面中iframe相互传值传参
Dec 13 Javascript
JavaScript入门之事件、cookie、定时等
Oct 21 Javascript
IFrame跨域高度自适应实现代码
Aug 16 Javascript
jquery图片放大镜功能的实例代码
Mar 26 Javascript
jquery利用命名空间移除绑定事件的方法
Mar 11 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
利用JS做网页特效_大图轮播(实例讲解)
Aug 09 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
Javascript之高级数组API的使用实例
Mar 08 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 Javascript
Vue3.0的优化总结
Oct 16 #Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 #Javascript
利用js实现简易红绿灯
Oct 15 #Javascript
关于Node.js中频繁修改代码重启服务器的问题
Oct 15 #Javascript
JS如何操作DOM基于表格动态展示数据
Oct 15 #Javascript
Node 使用express-http-proxy 做api网关的实现
Oct 15 #Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
Oct 15 #Javascript
You might like
在php和MySql中计算时间差的方法
2011/04/22 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP crc32()函数讲解
2019/02/14 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
django如何自己创建一个中间件
2019/07/24 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
几个Shell Script面试题
2014/04/18 面试题
js实现弹框效果
2021/03/24 Javascript
党员组织关系介绍信
2014/02/13 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
八一建军节演讲稿
2014/09/10 职场文书