当前位置: 首页 > news >正文

利用JavaScript实现顺序九宫格抽奖

顺序九宫格思路:

    1.先获取抽奖按钮,方便给按钮绑定点击事件2.初始化下标k=0,用于表示当前选中的索引下标,后续滚动起来会一直刷新3.获取大div盒子4.获取盒子里所有div元素,充当一个数组,后续可以通过下标来访问每个小div,进行一系列操作:换背景颜色5.设置滚动间隔,初始化时间500mm,后续通过判断圈数来设置时间6.声明一个存定时器标识的变量,后续来停止滚动7.初始化圈数=0,后续可以通过判断几圈来设置滚动快慢8.初始化随机数=0,存中奖下标的9.给抽奖按钮上点击事件9.1.给上面获取到的所有div元素的数组的下标k上背景颜色,显示滚动到哪了9.2生成随机数(0-0.999)✖获取到的所有div的长度(8个div 下标:0-7 长度:8 例:0.5*8=4)然后这个数再向下取整,存到上面的随机数里9.3设置定时器(执行的a函数,上面设置过的毫秒数)10.上a函数10.1 if else判断 条件:k下标小于所有div的长度-1(因为里面有8个div 长度是8 但是索引是0-7)语句:先索引+1,然后div的索引下标k-1(上一个)变成原色 k(当前的索引下标)变成红色否则:k不等长度的话 说明已经转了一圈了  就让k重新=0,然后div的索引下标k-1(上一个)变成原色 k(当前的索引下标)变成红色,再圈数+=1(+1是运算+=是赋值)10.2 if else判断 这个判断的是 修改滚动时间间隔的。开始滚动--结束滚动条件:圈数小于5 说明还早 再转快点语句:再嵌套一个if else, if(条件:time时间<=100 语句:time=100 意思是 最快就是100毫秒跳一个格子否则:time-=20 意思是 时间小于等于100的话 滚的太慢了 让每个格子滚到下一个的时间-20毫秒 )否则:慢慢结束滚动。嵌套一个if else, if(条件:time>=500 语句:time=500最慢就是500毫秒)否则:time+=20 意思是 太快了 要慢慢停下来 就每跳一个格子就+20毫秒10.3 if else判断 这个判断是 固定圈数和确定中奖的是那个一个东西条件:圈数大于8 &&并且 存的随机数==等于索引下标k语句:清除定时器 ;弹窗提示 获取到的所有div的下标k。innerHTML 来确定是那个奖品否则:清除定时器 ;再启动新的定时器 。按照 time 给的时间去调用 scrolls 函数,继续执行相关的操作

CSS部分:

* {margin: 0;padding: 0;}.box {background-color: lightgray;width: 340px;height: 340px;position: relative;}.box div {background-color: cadetblue;width: 100px;height: 100px;text-align: center;line-height: 100px;}.div1 {position: absolute;top: 10px;left: 10px;}.div2 {position: absolute;top: 10px;left: 120px;}.div3 {position: absolute;top: 10px;left: 230px;}.div4 {position: absolute;top: 120px;left: 230px;}.div5 {position: absolute;top: 230px;left: 230px;}.div6 {position: absolute;top: 230px;left: 120px;}.div7 {position: absolute;top: 230px;left: 10px;}.div8 {position: absolute;top: 120px;left: 10px;}.giftButton {position: absolute;width: 100px;height: 100px;top: 120px;left: 120px;border-radius: 10px;background-color: navajowhite;}

HTML部分

8个礼品div,1个开始抽奖按钮 都被最外层的一个大的div包着,通过子绝父相定位成一个九宫格

<div class="box"><div class="div1">电脑</div><div class="div2">手机</div><div class="div3">音响</div><div class="div4">冰箱</div><div class="div5">空调</div><div class="div6">衣柜</div><div class="div7">沙发</div><div class="div8">地毯</div><button class="giftButton">开始抽奖</button></div>

JS部分 

<script>//获取boxlet boxCenter = document.getElementsByClassName('box')[0];//获取boxcenter里的所有的div元素let allGift = boxCenter.getElementsByTagName('div');//获取到抽奖按钮,后续帮点击事件let giftButtons = document.getElementsByClassName('giftButton')[0];//充当奖品的下标let k = 0;// 旋转时间间隔let time = 500;//圈数,就是转动的圈数let count = 0;//存定时器的let inter;//随机的数(中奖的下标)let random = 0;//上点击事件giftButtons.onclick = function() {//奖品的下标k变颜色 allGift[k].style.backgroundColor = 'yellow';// 先生成一个随机数,然后*box里的所有div的数量,再向下取整random = Math.floor(Math.random() * allGift.length);//设定时器inter = setInterval(autoScroll, time);}//给函数命名 方便删除/创建定时器function autoScroll() {//k小于长度 代表转到最后一个元素了   if (k < allGift.length - 1) {k++;//上一个奖品变回原色allGift[k - 1].style.backgroundColor = 'cadetblue';//当前索引下标变红allGift[k].style.backgroundColor = 'yellow';//k比长度长的话代表该转第二圈了} else {//重新让k=0下标, 下一次循环k = 0;//该转下一圈的话,圈数+1count++;//上一圈的最后一个奖品变回原色allGift[allGift.length - 1].style.backgroundColor = 'cadetblue';//当前索引下标变红allGift[k].style.backgroundColor = 'yellow';}if (count < 3) {//圈数小于5 ,每次都-100 让他变快变快time -= 100;//限制条件:最快滚动就是0.2秒if (time < 100) {time = 100;}//最外面的否则。就是圈数大于} else {//让他变慢time += 100;//限制条件:最慢就是2秒滚动一次if (time > 300) {time = 300;}}//判断中奖的是啥 和 确认转的圈数clearInterval(inter);if (random == k && count > 4) {//提示用户alert('🎉恭喜你,中奖的是🎉:' + '👉👉' + allGift[k].innerHTML + '👈👈');} else {//清除定时器//在设置一个定时器9inter = setInterval(autoScroll, time);}}</script>

相关文章:

利用JavaScript实现顺序九宫格抽奖

顺序九宫格思路&#xff1a; 1.先获取抽奖按钮,方便给按钮绑定点击事件2.初始化下标k0,用于表示当前选中的索引下标&#xff0c;后续滚动起来会一直刷新3.获取大div盒子4.获取盒子里所有div元素&#xff0c;充当一个数组&#xff0c;后续可以通过下标来访问每个小div&#xff0…...

音视频入门知识(四):封装篇

⭐四、封装篇 H264封装成mp4、flv等格式&#xff0c;那为什么需要封装&#xff1f; ​ h264也能播放&#xff0c;但是按照帧率进行播放&#xff0c;可能不准 ★FLV **FLV&#xff08;Flash Video&#xff09;**是一种用于传输和播放视频的容器文件格式。FLV 格式广泛应用于流媒…...

在基于IMX6ULL的Linux嵌入式编程中,与内存相关的堆(Heap)和栈(Stack)有什么区别?Linux 系统中堆和栈的内存布局是怎么样的?

堆(Heap)和栈(Stack)的概念和区别 在基于 IMX6ULL 的 Linux 嵌入式编程中&#xff0c;堆&#xff08;Heap&#xff09;和栈&#xff08;Stack&#xff09;是两种不同的内存分配方式&#xff0c;各自具有不同的特点和用途。以下是它们的主要区别&#xff1a; 1. 存储位置 堆&am…...

Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品

随着技术的成熟和 AI 的崛起&#xff0c;很多原本需要团队协作才能完成的工作现在都可以通过自动化和智能化的方式完成。于是乎&#xff0c;单个开发者的能力得到了极大的提升 - 借助各种工具&#xff0c;一个人就可以完成开发、测试、运维等整条链路上的工作&#xff0c;渡劫飞…...

pthread.h互斥锁与原子操作

一&#xff1a;互斥锁 pthread.h 是 POSIX 线程库的头文件&#xff0c;它提供了多线程编程所需的各种功能。其中&#xff0c;互斥锁&#xff08;mutex&#xff09;的实现涉及多个底层机制&#xff1a; 1. 互斥锁的基本结构 在 POSIX 线程库中&#xff0c;互斥锁通常包含以下…...

网络基础入门到深入(3):网络协议-HTTP/S

目录 一、HTTP和HTTPS协议简介 1.HTTP协议 .HTTP 协议 作用&#xff1a; 特点&#xff1a; 2.HTTPS协议 作用&#xff1a; 实现方式&#xff1a; 特点&#xff1a; 二.HTTP的请求与响应结构 1.HTTP请求结构 1.请求行:描述操作和资源 2.请求头: 3.请求体 : 2.HTTP…...

Git的.gitignore文件详解与常见用法

诸神缄默不语-个人CSDN博文目录 在日常使用 Git 进行版本控制时&#xff0c;我们经常会遇到一些不需要被提交到远程仓库的文件&#xff08;例如日志文件、临时配置文件、环境变量文件等&#xff09;。为了忽略这些文件的提交&#xff0c;Git 提供了一个非常有用的功能&#xf…...

UniApp 组件的深度运用

一、引言 在当今的移动应用开发领域&#xff0c;跨平台开发已成为主流趋势&#xff0c;而 UniApp 作为其中的佼佼者&#xff0c;备受开发者青睐。UniApp 的强大之处很大程度上源于其丰富且功能多样的组件体系&#xff0c;这些组件宛如精巧的积木&#xff0c;能够帮助开发者快速…...

k8s部署nginx+sshd实现文件上传下载

要通过 nginx 和 sshd 实现文件的上传和下载&#xff0c;通常的做法是结合 SSH 协议和 HTTP 协议&#xff0c;使用 nginx 提供 Web 服务器功能&#xff0c;同时使用 sshd&#xff08;即 SSH 服务&#xff09;来处理通过 SSH 协议进行的文件传输。 SSH 实现文件的上传和下载&…...

Spring-Mybatis 2.0

前言&#xff1a; 第一点&#xff1a;过于依赖代码生成器或AI&#xff0c;导致基于mybaits的CRUD通通忘了&#xff0c;所以为了找回遗忘的记忆&#xff0c;有了该系列内容。 第二点&#xff1a;通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能…...

Linux 的历史与发展:从诞生到未来

Linux 的历史与发展&#xff1a;从诞生到未来 1. 起源之前&#xff1a;操作系统的历史背景 在 Linux 问世之前&#xff0c;操作系统的发展经历了多个重要阶段&#xff0c;这些阶段为 Linux 的诞生奠定了基础&#xff1a; 1940-1950 年代&#xff1a;计算机初期 早期计算机如 [[…...

SQL Server实现将分组的其他字段数据拼接成一条数据

在 SQL Server 中&#xff0c;可以使用 STRING_AGG 函数&#xff08;SQL Server 2017 及更高版本支持&#xff09;将分组的其他字段数据拼接成一条数据。以下是示例代码&#xff1a; 假设有一个表 Orders&#xff0c;结构如下&#xff1a; OrderIDCustomerIDProduct1C001Appl…...

学习笔记 --C#基础其他知识点(同步和异步)

C#中的同步和异步《一》 以下理解借鉴博客&#xff1a;借鉴博客地址1 异步编程&#xff08;Asynchronous&#xff09; 允许任务在后台执行&#xff0c;而不会阻塞调用线程。C#使用async和await关键字 async Task AsynchronousMethod() {// 等待异步操作完成await Task.Dela…...

一维、线性卡尔曼滤波的例程(MATLAB)

这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能,用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出**源代码总结一维线性卡尔曼滤波 …...

极品飞车6的游戏手柄设置

极品飞车&#xff0c;既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速&#xff0c;也可以使用游戏手柄来操作车辆的运行。需要注意的是&#xff0c;极品飞车虽然支持手柄&#xff0c;但是仅支持常见的北通、罗技还有部分Xbox系列的手柄&#xff0c;至于其他的PS4手…...

FreeRTOS Lwip Socket APi TCP Server 1对多

源文件 /********************************************************************************* file lwip_tcp_driver.cpp* brief TCP Server implementation using LwIP******************************************************************************* at…...

逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略

困厄铸剑心&#xff0c;逆袭展锋芒。 寒苦凝壮志&#xff0c;腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 &#xff08;一&#xff09;网络请求与响应 &#xff08;二&#xff09;网页解析 &#xff08;三&#xff09;爬行策略 三、网络爬虫的应用领…...

KOI技术-事件驱动编程(Sping后端)

1 “你日渐平庸&#xff0c;甘于平庸&#xff0c;将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的&#xff0c;那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人&#xff0c;和他们斗了那么久&#xff0c;最终却要变得和他们一样&#xff0c;…...

LVS 负载均衡原理 | 配置示例

注&#xff1a;本文为 “ LVS 负载均衡原理 | 配置” 相关文章合辑。 部分内容已过时&#xff0c;可以看看原理实现。 未整理去重。 使用 LVS 实现负载均衡原理及安装配置详解 posted on 2017-02-12 14:35 肖邦 linux 负载均衡集群是 load balance 集群的简写&#xff0c;翻…...

Hive分区再分桶表

在Hive中&#xff0c;数据通常是根据分区&#xff08;partition&#xff09;来组织的&#xff0c;但是对于大数据集&#xff0c;单层分区可能不够用&#xff0c;因此可以进一步细分为桶&#xff08;bucket&#xff09;。桶可以用于提供额外的并行处理和优化查询性能。在这种情况…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...