当前位置: 首页 > 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;。桶可以用于提供额外的并行处理和优化查询性能。在这种情况…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

MLP实战二:MLP 实现图像数字多分类

任务 实战&#xff08;二&#xff09;&#xff1a;MLP 实现图像多分类 基于 mnist 数据集&#xff0c;建立 mlp 模型&#xff0c;实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入&#xff0c;可视化图形数字&#xff1b; 2、完成数据预处理&#xff1a;图像数据维度转换与…...