js实现九宫格抽奖功能

news2025/1/16 13:40:59

分享一下js的九宫格抽奖功能

 

首先是html部分:

<div class="box">
			<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>
			<div class="div9">苹果13</div>
			<strong class="button"> 点击抽奖</strong>
		</div>

接下来是设置样式:

1. 创建div作为抽奖转盘 

2. 在div内创建8个奖品,按照顺序分别定位到合适位置,九宫格,例如:
    1 2 3
    8    4
    7 6 5

3. 在div内再创建一个标签作为抽奖按钮,并定位到中间
4. 统一给奖品设置背景颜色,例如:蓝色(以下都已蓝色为默认颜色)

* {
				margin: 0;
				padding: 0;
			}

			.box {
				width: 340px;
				height: 340px;
				border: 1px #00FFFF solid;
				position: relative;
				margin: 100px;
			}

			.box div {
				width: 100px;
				height: 100px;
				background-color: royalblue;
				text-align: center;
				line-height: 100px;
			}

			.div2 {
				position: absolute;
				top: 10px;
				left: 10px;
			}

			.div3 {
				position: absolute;
				top: 10px;
				left: 120px;
			}

			.div4 {
				position: absolute;
				top: 10px;
				left: 230px;
			}

			.div5 {
				position: absolute;
				top: 120px;
				left: 230px;
			}

			.div6 {
				position: absolute;
				top: 230px;
				left: 230px;
			}

			.div7 {
				position: absolute;
				top: 230px;
				left: 120px;
			}

			.div8 {
				position: absolute;
				top: 230px;
				left: 10px;
			}

			.div9 {
				position: absolute;
				top: 120px;
				left: 10px;
			}

			.button {
				width: 100px;
				height: 100px;
				background-color: #62c6a3;
				position: absolute;
				text-align: center;
				line-height: 100px;
				top: 120px;
				left: 120px;
			}

最后是功能部分:

1. 获取按钮标签,并给它绑定点击事件,点击执行 eve 函数作为事件函数
2. 创建全局变量 k 初始为 0 ,表示为当前选中奖品的下标
3. 获取奖品列表,当点击后,先让第一个奖品修改背景颜色为粉色,也就是 k 下标对应的奖品

4. 创建全局变量 time 初始为 500 ,在点击事件函数内创建定时器,每隔 time 毫秒,执行 pu 函数
5. 获取奖品列表,并创建 pu 函数,在函数内判断 k 是否小于 7 (奖品的数量 - 1)
6. 如果小于7,执行 k++ 表示让当前选中的下标加一,让上一个奖品也就是 k - 1 下标对应的奖品颜色为蓝色
7. 并让当前选中的奖品也就是 k 下标对应的奖品背景颜色为粉色
8. 如果不小于7,表示 k 不能再自增了,需要重新初始为 0 ,
9. 让最后一件奖品 (奖品的数量 - 1 的下标对应的奖品)的背景颜色为蓝色,

10.让第一件奖品 也就是 k 下标对应的奖品背景颜色为粉色

let button = document.getElementsByClassName('button')[0];
			let box = document.getElementsByClassName('box')[0];
			let pirze = box.getElementsByTagName('div');
			console.log(pirze);
			
			let k = 0;
			let time = 500;
			let count = 0;
			let int;
			let rom = 0;
			button.onclick = eve;
			
			function eve() {
				pirze[k].style.background = "pink";
				int = setInterval(pu, time)
				rom = Math.floor(Math.random() * pirze.length);
				button.onclick = null;
			}

			function pu() {
				if (k < pirze.length - 1) {
					k++;
					pirze[k - 1].style.background = "royalblue";
					pirze[k].style.background = "pink";
				} else {
					k = 0;
					count++;
					pirze[pirze.length - 1].style.background = "royalblue";
					pirze[k].style.background = "pink";
				}
				if (count <= 5) {
					if (time <= 100) {
						time = 100;
					} else {
						time -= 20;
					}
				} else {
					if (time >= 500) {
						time = 500;
					} else {
						time += 20;
					}

				}
				if (count > 7 && rom == k) {
					clearInterval(int);
					count = 0;
					rom = 0;
					time = 500;
					button.onclick = eve;
					let text = pirze[k].innerHTML;
					setTimeout(function(){
						alert("恭喜您获得:" + text);
	 				},300)
				}else{
					clearInterval(int);
					int = setInterval(pu, time)
				}

			}

以上就是本章的全部内容,感谢您的阅读。

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

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

相关文章

【vue】控制台中如何移除数组arr中的值?如何给数组arr中放值?

移除数组arr属性中的值&#xff1a;vm.arr.shift() 新增数组arr属性中的值&#xff1a;vm.arr.push(‘属性值’) 移除atguigu3样式后效果&#xff1a; 向数组arr中添加样式值后效果&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta…

FlinkSql开窗实例:消费kafka写入文本

前言 以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中&#xff0c;对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。 Flink官网示例 准备 本地下载个kafka&#xff08;单机即可&#xff09;&#xff0c;新建个桌面目…

Unreal 读写自定义配置文件

基础 首先需要自定义一个继承自UObject的类&#xff0c;UCLASS加上config标志 UCLASS(config MyClass) class UMyClass: public UObject将想要和配置文件交互的属性&#xff0c;UFUNCTION加上Config标志 UPROPERTY(Config, EditAnywhere) float TestP;之后只要配置文件内存…

【日常系列】LeetCode《21·综合应用3》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 217 &#xff1a;存在重复元素 https://leetcode.cn/problems/contains-duplicate/ 提示&#xff1a; 1 < nums.length < 10^5 -10^9 < nums[…

Python基础教程(2)——列表、元组、字典、集合、斐波纳契数列、end 关键字、条件控制、循环语句

1.列表 &#xff08;1&#xff09;删除列表的元素 list [Google, Runoob, 1997, 2000] print ("原始列表 : ", list) del list[2] print ("删除第三个元素 : ", list)&#xff08;2&#xff09;Python列表脚本操作符 &#xff08;3&#xff09;嵌套列表…

Arco 属性

文章目录Arco介绍1. 简介1.1 背景1.2 运行环境1.3 浏览器兼容性2. 设计价值观2.1 清晰2.2 一致2.3 韵律2.4 开放3. 设计原则3.1 及时反馈3.2 贴近现实3.3 系统一致性3.4 防止错误发生3.5 遵从习惯3.6 突出重点3.7 错误帮助3.8 人性化帮助4. 界面总体风格4.1 页面风格4.1.1 主色…

知识答题小程序如何制作_分享微信答题抽奖小程序制作步骤

知识答题小程序如何制作&#xff1f;现在越来越多的企业和组织逐步进行各种获奖知识问答小程序。那么&#xff0c;如何制作一个答题小程序呢&#xff1f;今天&#xff0c;我们一起来看看~需要的老板不要走开哦~既然点进来了&#xff0c;那就请各位老板耐心看到最后吧~怎么做一个…

JDBC如何破坏双亲委派机制

JDBC的注册会涉及到java spi机制&#xff0c;即Service Provideer Interface&#xff0c;主要应用于厂商自定义组件或插件中&#xff1b;简单说就是java来定义接口规则和方法&#xff0c;厂商实现具体逻辑&#xff0c;每家厂商根据自己产品实现的逻辑肯定不相同&#xff0c;但上…

数据库查询语句-详细篇

今天来梳理一下数据库的一些查询语句&#xff0c;做软件/移动端/电脑端&#xff0c;开发程序时必然离不开数据库的设计以及查询&#xff1b; 一&#xff1a;具体的代码如下展示&#xff1a; 1.查询数据库指定表的所有信息 select * from uploadimagecode;2.查询当前数据表部…

说说PPT的“只读模式”和“限制编辑”有何区别

对PPT的内容进行保护&#xff0c;使其不能随意编辑&#xff0c;防止意外更改&#xff0c;我们可以将PPT设置成无法编辑、无法改动的“保护模式”。 设置“保护模式”&#xff0c;一般我们都会想到【限制编辑】模式&#xff0c;但在设置的时候&#xff0c;会发现PPT里&#xff…

毕业半年年终总结

毕业半年年终总结 如果说2021年主要的内容是求职和实习 那么2022年一年主要的内容便是毕业和工作 匆匆忙忙 本科毕业了 6月份的时候参加完毕业答辩&#xff0c;也就顺利的毕业了 实际上中途也有过一些插曲&#xff0c;比如毕业设计是制作某某管理系统&#xff0c;基本上所有…

【Java编程进阶】流程控制结构详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】 文章目录1. 流程控制结构2. 顺序结构3. 分支结构3.1 单分支3.2 双分支3.3 多分支 (if-else)3.4 嵌套 if3.5 多分支结构 (switch)4. 循环结构4.1 for 循环4.2 while 循环4.3 do...while循环5. 流程跳转5.1 break5.2 …

【数据结构】优先级队列(堆)

成功就是失败到失败&#xff0c;也丝毫不减当初的热情 目录 1.理解优先级队列 2.优先级队列的底层 2.1 认识堆 2.1.1 堆的概念 2.2.2 堆的存储 2.2 堆的创建 2.2.1 向下调整算法 2.2.2 堆的创建 2.3 堆的插入 2.4 堆的删除 2.5 查看堆顶元素 2.6 堆的运用 3…

windows 11 安装jdk1.8

1.先去JDK官网下载 JDK1.8官网 2.进入到官网之后 3. 点击上图windows选项       按照你的电脑是32位还是64位按需下载(我电脑是64位) 4. 点击下载之后就会跳转到Oracle账号登录界面&#xff08;没有Oracle账号的注册一下这边我就省略了注册了&#xff09; 5.把下载好的…

商业智能BI财务分析,如何从财务指标定位到业务问题

商业智能BI开发人员都会思考如何从财务指标定位到业务问题&#xff0c;就是做了很多的商业智能BI开发&#xff0c;每次也都涉及到了财务分析&#xff0c;各种财务能力指标&#xff0c;各种可视化的分析图表。但是不知道这些财务指标到底能够反映出企业的什么问题&#xff0c;和…

蓝桥杯Python练习题3-十六进制转八进制

资源限制 内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n &#xff08;1<n<10&am…

Weston 纹理倒置(render-gl)

纹理倒置 背景 在 render-gl 接入 frame buffer object 实现 off-screen 渲染后,发现得到的渲染图发生了180的倒置. 查阅了有关资料后,在 eglspec.1.5 中的 2.2.2.1 Native Surface Coordinate Systems 找到了答案: The coordinate system for native windows and pixmaps …

2023届毕业生职场第一步:挡飞刀

这篇博客不会教你某一段代码怎么写&#xff0c;某一个知识点怎么入门&#xff0c;但却可以让你在2023年的职场上&#xff0c;躲避飞刀。 目录 1、啥是挡飞刀 2、其他知名大厂也好不到哪里去 3、 毕业生如何躲飞刀&#xff1f; 4、毕业生首选什么样的公司 5、不建议去这样的…

工具学习——ubuntu轻量桌面对比

因为最近要做一些ubuntu上的开发&#xff0c;然后使用ssh问题是经常会出现中断&#xff0c;虽然可以使用等tmux方法来挂起进程&#xff0c;但是感觉不如界面方便&#xff0c;然后现在问题来了&#xff0c;我的ubuntu服务器是一个双核的性能很差内存也少的机器&#xff0c;我怎么…

13-Golang中for循环的用法

Golang中for循环的用法for循环基本语法for循环流程图注意事项和使用细节for循环 就是让一段代码循环的执行。 基本语法 for循环变量初始化&#xff1b;循环条件&#xff1b;循环变量迭代{循环操作(语句)}package main import "fmt"func main(){for i : 1; i < …