首页 > 其他分享 >js实现实现九宫格乱序抽奖

js实现实现九宫格乱序抽奖

时间:2024-06-16 16:28:37浏览次数:12  
标签:color 九宫格 height width let background js 30% 乱序

我们以前写的九宫格抽奖,都是顺时针按照顺序进行旋转抽奖,今天给大家分享一下乱序,就是不按照一定顺序的。

  • 用户的具体步骤:用户点击开始抽奖时,奖项开始随机闪,闪到一定次数后停止并且进行抽奖成功提示;
  • 这个闪到一定的次数,次数是随机的;就是当我们点击按钮时生成一个随机数(就相当于是次数范围我随便设置的50~100);
  • 当点击按钮时奖品已经开始闪,就需要设置定时器,定时器每隔200毫秒执行一次,每次执行生成一个范围在奖品数量之内的数字当下标,然后让对应奖品的颜色切换一下
  • 另外再声明一个变量为0,每次闪动加1,当这个值等于或者大于生成的50-100之间的随机数时抽奖结束并进行奖品内容提示
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>选夫九宫格抽奖2</title>
		<script src="js/jquery-3.7.1.min.js"></script>
		<style>
			* {
				margin: 0;
				padding: 0;
			}

			h1 {
				text-align: center;
				font-family: 宋体;
			}

			.box {
				font-family: 宋体;
				width: 340px;
				height: 340px;
				text-align: center;
				line-height: 100px;
				background-color: cornflowerblue;
				position: absolute;
				margin: 5% 40%;

			}

			.div1 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 10px;
				left: 10px;
			}

			.div2 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 10px;
				left: 120px;
			}

			.div3 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 10px;
				left: 230px;
			}

			.div4 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 120px;
				left: 230px;
			}

			.div5 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 230px;
				left: 230px;
			}

			.div6 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 230px;
				left: 120px;
			}

			.div7 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 230px;
				left: 10px;
			}

			.div8 {
				width: 30%;
				height: 30%;
				background-color: aqua;
				position: absolute;
				top: 120px;
				left: 10px;
			}

			#but {
				font-family: 宋体;
				width: 30%;
				height: 30%;
				top: 120px;
				left: 1px;
				background-color: deepskyblue;
				position: relative;
			}
		</style>
	</head>
	<body>

		<h1>九宫格抽奖</h1>

		<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 id="but">开始抽奖</button>
		</div>
		<script>
			// 获取按钮
			let button = document.getElementById('but');
			// 获取最大的div
			let box = document.getElementsByClassName('box')[0];
			console.log(box);
			// 获取box里的div标签
			let award = box.getElementsByTagName('div');
			console.log(award);
			// 创建全局变量k初始化为0
			let k = 0;
			// 闪动的次数初始值
			let count = 0;
			// 定时器
			let int;
			let num;
			// 创建全局变量时间time的初始值为500.
			let time = 100;
			button.onclick = but;
			// 点击按钮时会触发的事件
			function but() {
				setTimeout(one, time);
				// 向上取整随机数 取值50~100
				num = Math.floor(Math.random() * 51) + 50;
				// 点击按钮的时候为空
				button.onclick = null;
			}
			// 定时器
			function one() {
				for (let i = 0; i < award.length; i++) {
					award[i].style.backgroundColor = 'aqua';
				}
				k = Math.floor(Math.random() * award.length);
				console.log(k);
				award[k].style.backgroundColor = '#81b5f8';
				// 闪动的次数加一
				count++;
				// 判断闪动的次数大于等于50~100的这个区间时
				if (count >= num) {
					// 清除永久性定时器并执行一次性定时器的弹窗
					clearInterval(int);
					count = 0;
					time = 100;
					button.onclick = but;
					// 获取div下标的内容
					let text = award[k].innerHTML;
					// 使用一次性定时器执行抽奖过后的弹窗
					setTimeout(function() {
						alert('恭喜您荣获' + '"' + text + '"' + "的机会!");
					}, 300);
				} else {
					// 否则清除永久定时器,继续执行int
					clearInterval(int);
					int = setInterval(one, time);
				}
			}
		</script>
	</body>
</html>

注意:最重要的是奖项背景颜色的设置!我在这里卡了很久!应该在定时器内每执行一次循环一次奖项的长度然后设置奖项的默认背景颜色;再通过随机数设置奖项抽中的颜色;我在这里执行顺序一直没弄明白!不过现在明白了!

标签:color,九宫格,height,width,let,background,js,30%,乱序
From: https://blog.csdn.net/2301_79420857/article/details/139637082

相关文章

  • 要将URL参数转换为JSON对象,可以使用以下函数:
    要将URL参数转换为JSON对象,可以使用以下函数:javascriptfunctiongetQueryParams(url){//使用正则表达式提取URL参数constparamsString=url.split('?')[1];if(!paramsString){return{};}//将参数字符串分割成数组,并解析键值对constparams=......
  • 【图像隐写】基于Jsteg算法实现JPEG图像信息隐藏,可设置DCT系数 嵌入率附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【three.js案例一】智慧星球
    直接附上源码:import*asTHREEfrom'three';import{OrbitControls}from'three/addons/controls/OrbitControls.js';//场景constscene=newTHREE.Scene();constgeometry=newTHREE.SphereGeometry(50,32,16);console.log('.postion�......
  • 通过Vue3+高德地图的JS API实现市区地图渲染
    效果图:核心代码:<scriptsetup>import{onMounted,onUnmounted}from'vue';importAMapLoaderfrom'@amap/amap-jsapi-loader';import{message}from'ant-design-vue';importschoolfrom'@/assets/icons/school......
  • Day.js日期时间的常计算
    Day.js日期时间的常计算1、介绍Day.js:Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间。主要为操作时间日期的库。2、场景使用计算周几、当月第一天计算xx天前/后的日期将时间戳转换为日期(YYYY-MM-DD)计算月天数获取两个日期的时间差3、使用例......
  • 支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象
    支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象SPI三方服务接入指南https://opendocs.alipay.com/isv/spiforisv服务端实现Demo以下Demo是通过Java实现的SPI服务样例,包括验签支付宝请求报文、业务逻辑处理、商家加签以及响应报文构造的逻辑。......
  • 支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码
    支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象https://www.cnblogs.com/oktokeep/p/18249346packagecom.example.core.mydemo;importcom.alibaba.fastjson.JSON;imp......
  • 理解JSP底层
    importjava.net.URLDecoder;publicclasslogin_jsp{//JSP的9大内置对象privateJSPWriterout;//当前JSP输出流对象privateHttpServletRequestrequest;//请求对象privateHttpServletResponseresponse;//响应对象privateHttpSession......
  • 认识与学习JSP
    JSP核心技术什么是JSPJSP全称是JavaServerPages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是ServletJSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页......
  • docker 部署three.js
    安装docker没有daemon.json文件检查daemon.json文件是否存在$ls/etc/docker创建一个新的daemon.json文件$sudotouch/etc/docker/daemon.json在daemon.json文件中添加配置项{"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com","https://regist......