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的Date方法实现代码(prototype)
Nov 20 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
单元选择合并变色示例代码
May 26 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
Vue2.0实现购物车功能
Jun 05 Javascript
详解Vue.js搭建路由报错 router.map is not a function
Jun 27 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
ES6的Fetch异步请求的实现方法
Dec 07 Javascript
js实现移动端轮播图
Dec 21 Javascript
深入理解redux之compose的具体应用
Jan 12 Javascript
详解js创建对象的几种方式和对象方法
Mar 01 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下使用SMTP发邮件的代码
2008/01/10 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
简析Python的闭包和装饰器
2016/02/26 Python
深入理解python对json的操作总结
2017/01/05 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
Python异常处理操作实例详解
2018/08/28 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
django rest framework使用django-filter用法
2020/07/15 Python
Python类型转换的魔术方法详解
2020/12/23 Python
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
请介绍一下Ant
2016/07/22 面试题
优秀党员自我评价范文
2014/09/15 职场文书
董事长岗位职责
2015/02/13 职场文书
二手房购房意向书
2015/05/09 职场文书
医院病假条怎么写
2015/08/17 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang