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 相关文章推荐
jQuery 前的按键判断代码
Mar 19 Javascript
js定时器(执行一次、重复执行)
Mar 07 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
深入理解Webpack 中路径的配置
Jun 17 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
Vue触发隐藏input file的方法实例详解
Aug 14 Javascript
js实现小时钟效果
Mar 25 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 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字符串按照单词进行反转的方法
2015/03/14 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
python 异常处理总结
2016/10/18 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
机械个人求职信范文
2014/01/24 职场文书
30年同学聚会感言
2014/01/30 职场文书
销售总经理岗位职责
2014/03/15 职场文书
毕业留言寄语大全
2014/04/10 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
合理化建议书范文
2015/09/14 职场文书