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实现的仿Flash广告图片轮换效果
Apr 24 Javascript
js加解密 脚本解密
Feb 22 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
Dec 03 Javascript
jQuery代码优化 事件委托篇
Nov 01 Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
基于webpack 实用配置方法总结
Sep 28 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
ES6学习教程之对象字面量详解
2017/10/09 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
es6基础学习之解构赋值
2018/12/10 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python对数据库操作
2016/03/28 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
优秀演讲稿范文
2013/12/29 职场文书
医院院务公开实施方案
2014/05/03 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书