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 相关文章推荐
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
理解Javascript_09_Function与Object
Oct 16 Javascript
jQuery循环动画与获取组件尺寸的方法
Feb 02 Javascript
Jquery实时监听input value的实例
Jan 26 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
简谈创建React Component的几种方式
Jun 15 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
Jun 28 Javascript
angularjs自定义过滤器demo示例
Aug 24 Javascript
vue2.x数组劫持原理的实现
Apr 19 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获取url参数方法总结
2014/11/13 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
vue的for循环使用方法
2019/02/12 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
基python实现多线程网页爬虫
2015/09/06 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
十佳教师事迹材料
2014/01/11 职场文书
党员自我剖析材料
2014/08/31 职场文书
领导干部考核评语
2015/01/04 职场文书
业务员辞职信范文
2015/03/02 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
选购到合适的激光打印机
2022/04/21 数码科技