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

发布于:2025-02-11 ⋅ 阅读:(65) ⋅ 点赞:(0)

顺序九宫格思路:

    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>
			//获取box
			let 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;
					//该转下一圈的话,圈数+1
					count++;
					//上一圈的最后一个奖品变回原色
					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 {
					//清除定时器
					//在设置一个定时器9
					inter = setInterval(autoScroll, time);
				}

			}
		</script>