【JavaScript】---- 使用 Tween 实现转盘抽奖

1. 实现效果

在这里插入图片描述

2. 需求分析

  1. 它和正常的转盘抽奖不一样,一般实现都是指针形式的,转盘转动,最后指针停留在奖品的随机位置;
  2. 通过上边图发现奖品必须刚好停留在奖品的位置,因为不是指针,所以不能最后落到随机位置。

3. 常见转盘抽奖实现

在这里插入图片描述

常见九宫格抽奖和转盘抽奖组件实现!!!

4. 使用库

  1. 张鑫旭大佬实现的动画函数算法库
  2. 如何使用Tween.js各类原生动画运动缓动算法,使用文档

5. 引入 Tween.js 算法库

	<script src="./js/tween.js"></script><script src="./js/animation.js"></script>

6. HTML 布局

  1. 转盘图片 game_luck.png;
  2. 指针图片 game_check.png;
  3. 开始按钮 game_btn.png。
    <div class="rui-game-luck-content"><img src="./images/game_luck.png" :style="`transform: translate(-50%, -50%) rotate(${angleNumber}deg)`" :data-id="angleNumber"id="turntable" class="rui-game-luck-img" alt=""><img src="./images/game_check.png" style="z-index: 10;" class="rui-game-luck-img" alt=""><img src="./images/game_btn.png" @click="drawLuck" class="rui-game-luck-btn" alt=""></div>

7. CSS 实现

	.rui-game-luck-content{width: 5.38rem;height: 5.38rem;position: relative;margin: 1.55rem auto 0.35rem;}.rui-game-luck-img{width: 5.38rem;height: 5.38rem;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}.rui-game-luck-btn{width: 2.26rem;height: 2.26rem;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 12;}

8. 点击旋转动画实现

  1. 申明一个 Lock 锁,用于防止抽奖时的重复点击;
  2. 抽奖的各个变量申明;
  3. 抽奖次数已用完判断;
  4. 判断锁是否生效;
  5. 生成0到5之间的随机整数;
  6. 计算最后的角度;
  7. 转盘旋转动画;
  8. 抽奖次数减少;
  9. 显示遮罩层中奖奖品;
  10. 记录上一次转动最终角度。
	  const lock = new Lock();var app = new Vue({el: "#app",data: {show: false, // 遮罩层luckNumber: 0, // 中奖位置luckList: ['成长快乐','笑口常开','健康活泼','成长快乐','笑口常开','健康活泼'], // 奖品列表angleNumber: 0, // 转盘旋转角度drawNumber: 3, // 抽奖次数recordPrevAngle: 0, // 上一次转动最终角度drawOverMask: false, // 抽奖次数已用完遮罩层},methods: {// 再抽一次drawAgainLuck(){this.show = false;this.drawLuck();},// 抽奖drawLuck(){// 抽奖次数已用完if(this.drawNumber <= 0){this.drawOverMask = true;return false;}// 判断锁是否生效if(lock.isLocked){return false;}// 获取锁lock.acquire(); let _this = this;let prevLuckAngle = this.luckNumber * 60;// 生成0到5之间的随机整数let randomNum = Math.floor(Math.random() * this.luckList.length);this.luckNumber = randomNum;// 计算最后的角度let endAngle = 360 * 20 + _this.luckNumber * 60 - prevLuckAngle;// 转盘旋转动画Math.animation(_this.recordPrevAngle, _this.recordPrevAngle + endAngle, 5000, 'Cubic.easeInOut',function(value, isEnding) {_this.angleNumber = value;if(isEnding){lock.release(); // 释放锁// 抽奖次数减少_this.drawNumber--;// 显示遮罩层中奖奖品_this.show = true;// 记录上一次转动最终角度_this.recordPrevAngle += endAngle;console.log(_this.luckList[_this.luckNumber])}})}}});

9. 最终效果

在这里插入图片描述

10. 总结

  1. 使用现有的算法库,减少了我的工作量;
  2. 在不考虑异步中奖的时候,我觉得这个实现是比较便捷的方法,当然如果需要异步中奖结果,就需要多个动画配合实现,这个功能准备将这个算法库移植到微信小程序后再实现;
  3. 同一个需求,实现的方法很多,找到最适合自己的,多关注大佬的博客,学习,感觉收获满满!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SqlServer基础学习笔记

SQL Server 是啥&#xff1f; 想象一下你有一本超级智能的电子记事本&#xff0c;里面可以记录各种信息&#xff0c;比如你的好友名单、他们喜欢的颜色、生日等等。这个记事本不仅能记录&#xff0c;还能帮你查找、修改和删除这些信息。SQL Server就像是这样的一个超级记事本&a…

福建聚鼎:做装饰画到底能不能赚钱

在探讨做装饰画能否成为盈利的行当之前&#xff0c;我们必须认识到任何一门艺术或手工的价值并非仅仅取决于其直接的经济收益。艺术创作本身就是一种文化传承和个人情感表达的方式&#xff0c;它对创作者和社会都有着不可估量的精神价值。然而&#xff0c;将话题限定在经济回报…

MySQL入门学习-数据修改.修改

在MySQL中&#xff0c;数据修改包括对表中的数据进行插入、更新和删除操作。这些操作可以通过SQL语句来完成&#xff0c;常用的语句包括INSERT、UPDATE和DELETE。 一、数据修改常用语句的基本操作。 1. 插入数据&#xff1a; - 插入数据可以使用INSERT INTO语句&#xff0c;…

线性结构(链表结构)

链表结构的定义 1.什么是链表 链表结构是由许多节点构成的&#xff0c;每个节点都包含两部分&#xff1a; 数据部分&#xff1a;保存该节点的实际数据。 地址部分&#xff1a;保存的是上一个或下一个节点的地址。 2.链表分类 单向链表 双向链表 双向循环链表 3.链表的特点 节点…

武汉星起航跨境电商:亚马逊自发货订单处理全流程解析

在亚马逊电商平台上&#xff0c;自发货订单的处理是卖家日常运营中的重要环节。正确的处理流程不仅能确保交易的顺畅进行&#xff0c;还能提升买家满意度&#xff0c;进而促进销售业绩的提升。武汉星起航在这里整理了亚马逊自发货订单的处理流程&#xff0c;帮助卖家更好地管理…

基于ChatGPT 和 OpenAI 模型的现代生成式 AI

书籍&#xff1a;Modern Generative AI with ChatGPT and OpenAI Models: Leverage the capabilities of OpenAIs LLM for productivity and innovation with GPT3 and GPT4 作者&#xff1a;Valentina Alto 出版&#xff1a;Packt Publishing 书籍下载-《基于ChatGPT 和 Op…

4 局域网技术(一):局域网概述

目录 1 局域网概述1.1 局域网的特点1.2 局域网的介质访问控制方法1、具有冲突检测的载波侦听多路访问&#xff08;CSMA/CD&#xff09;对几个概念进行解释CSMA/CD的说明 2、令牌&#xff08;Token&#xff09;技术 1.3 网络适配器1、网络适配器的功能2、网卡的总类3、Ethernet网…

视频太大了?这2招轻松完成在线视频压缩

在当今数字媒体时代&#xff0c;视频文件的大小往往是一个让人头疼的问题。无论是拍摄的素材、编辑的成品还是下载的内容&#xff0c;过大的视频文件不仅占用大量存储空间&#xff0c;还可能影响传输速度和播放流畅度。那么&#xff0c;如何轻松完成在线视频压缩&#xff0c;减…

百度go【面试真题】

前言 这是陈旧已久的草稿2023-02-09 15:00:43 寒假实习面试真题 现在2024-5-12 22:25:09&#xff0c;发布到[面试真题]专栏中。 百度【面试】 go语言为什么快&#xff1f; 进程线程协程的区别 进程切换和线程切换的区别 进程的状态 进程的切换虚拟空间 redis关了&#xf…

【网络安全产品互联互通 告警信息资产信息】相关思维导图

近日&#xff0c;在某客户安全建设项目中&#xff0c;涉及安全告警事件的梳理上报。在整理及学习中发现最近&#xff08;以19年等保2.0为参考分隔“最近”&#xff09;发布的可参考标准&#xff0c;因此做了思维导图的整理。 PS&#xff1a;标准中存在引用的情况&#xff0c;过…

setImmediate不能在浏览器中执行

setImmediate 函数不是浏览器的标准 API&#xff0c;而是 Node.js 环境中的一个函数。然而&#xff0c;你可以使用 setTimeout 函数实现类似的效果。下面是一个代码示例&#xff1a; // 使用 setTimeout 模拟 setImmediate setTimeout(function() {console.log("这个函数…

数字序列比大小 - 贪心思维

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 一、题目描述 A&#xff0c;B两个人万一个数字的游戏&#xff0c;在游戏前…

强化学习中的重要性采样

强化学习中的重要性采样介绍 在强化学习中&#xff0c;**重要性采样&#xff08;Importance Sampling&#xff09;**是一种非常有用的技术&#xff0c;它主要用于估计和优化策略&#xff08;policy&#xff09;下的期望回报&#xff0c;特别是当我们无法直接从目标策略中采样时…

ansible利用playbook 部署lamp架构

搭建参考&#xff1a;ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…

OpenAI 把超强AI带进日常,GPT-4o 让机器也懂情感!

一、前言 ⭐⭐ 立即体验&#xff1a;GPT-4o OpenAI 在春季发布会上推出了名为 GPT-4o 的旗舰级生成式人工智能模型&#xff0c;这一模型的发布不仅标志着技术的巨大飞跃&#xff0c;更预示着人机交互方式的全面革新。"o" 在 GPT-4o 中代表 "omni"&#xf…

minio入门教学

MinIO 是一种高性能、S3 兼容的对象存储。 它专为大规模 AI/ML、数据湖和数据库工作负载而构建&#xff0c;并且它是由软件定义的存储。 不需要购买任何专有硬件&#xff0c;就可以在云上和普通硬件上拥有分布式对象存储。 MinIO拥有开源 GNU AGPL v3 和商业企业许可证的双重许…

关于Nodejs的面试问题

package.json 依赖项版本号前面的 ~ ^ 有什么用&#xff1f; ~ 会匹配最近的小版本依赖包&#xff0c;比如~1.2.3会匹配所有1.2.x版本&#xff0c;但是不包括1.3.0^ 会匹配最新的大版本依赖包&#xff0c;比如^1.2.3会匹配所有1.x.x的包&#xff0c;包括1.3.0&#xff0c;但是…

使用 Express 框架构建的 Node.js web 应用程序

使用 Express 框架构建的 Node.js web 应用程序 ├── config │ └── config.js ├── middlewares │ └── errorHandler.js ├── routes │ ├── index.js │ ├── postRoutes.js │ └── userRoutes.js ├── .env ├── .gitignore ├── app.js ├…

新手必看:页面设计与网页设计的区别及应用指南

页面设计和网页设计都是创建网页的过程&#xff0c;但页面设计的焦点和目的与网页设计不同。页面设计往往更注重网站的视觉和交互设计&#xff0c;而网页设计则侧重于整个网站的架构和功能设计。本文将具体介绍页面设计与网页设计的区别&#xff0c;新手小看必看&#xff01; …

腾讯宣布混元文生图大模型开源: Sora 同架构,可免费商用

5月14日&#xff0c;腾讯宣布旗下的混元文生图大模型全面升级并对外开源&#xff0c;目前已在 Hugging Face 平台及 Github 上发布&#xff0c;包含模型权重、推理代码、模型算法等完整模型&#xff0c;可供企业与个人开发者免费商用。 这是业内首个中文原生的DiT架构文生图开…