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 Serializer序列化时间处理示例
Jul 31 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
Sep 25 Javascript
详解iframe与frame的区别
Jan 13 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
Oct 10 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
Feb 13 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
手挽手带你学React之React-router4.x的使用
Feb 14 Javascript
聊聊Vue 中 title 的动态修改问题
Jun 11 Javascript
原生JS实现京东查看商品点击放大
Dec 21 Javascript
Vue详细的入门笔记
May 10 Vue.js
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实现的简单异常处理类示例
2017/05/04 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
PHP反射实际应用示例
2019/04/03 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
解析js如何获取css样式
2016/12/11 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python 多个参数不为空校验方法
2019/02/14 Python
python实现126邮箱发送邮件
2020/05/20 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
九年级家长会邀请函
2014/01/15 职场文书
班主任寄语大全
2014/04/04 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
干部理论学习心得体会
2016/01/21 职场文书
详解Vue router路由
2021/11/20 Vue.js
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis