先看效果图

实现原理
- 生成所有名字数值范围内的随机数,每一个数字就代表每个人名的索引
- 所有名字保存在一个一维数组
arr内,生成某个数字n后把当前的数字n传给对应的arr[n],修改它的背景色
- 定时器的开启来实现动态的跳动选择,每次点击开始按钮要判断定时器是否开启,若开启则关闭清空
废话不说😏上代码
结构和样式
<div class="wrapper">
<h1 style="text-align: center;">***标题自拟***</h1>
<ul class="box">
</ul>
<div class="click">
<button class="start">开始/停止</button>
</div>
</div>
body {
background-color: rgb(204, 195, 195);
}
.wrapper {
margin: 100px auto;
border: 1px solid #ddd;
width: 1500px;
text-align: center;
position: relative;
}
.box {
width: 1000px;
margin: 0 auto;
}
.box li {
vertical-align: top;
display: inline-block;
width: 100px;
height: 50px;
border: 2px solid rgb(92, 147, 163);
border-radius: 15px;
text-align: center;
line-height: 50px;
margin: 5px;
}
.wrapper button {
border: none;
width: 100px;
height: 50px;
border-radius: 10px;
cursor: pointer;
outline: none;
margin-top: 20px;
font-weight: bolder;
color: rgb(30, 17, 209);
background: #eee;
box-shadow: 0 15px 30px rgb(0 0 0 / 15%);
transition: all .5s;
}
.wrapper button {
display: inline-block;
}
.wrapper .click:hover button {
color: #eedf10;
}
js样式
var nameString = new String(
"小橘子,白勇太,恩佐,伊莲,妲己,蔡文姬,董卓,曹操,孙尚香,诸葛亮,司马懿,司马昭,刘备,刘婵,关羽,张飞,许褚,项羽,刘邦,雅典娜,赵信,亚瑟,嬴政,刘彻"
);
var box = document.querySelector(".box")
var start = document.querySelector(".start");
var arr = nameString.split(",")
var str = "";
for (var i = 0; i < arr.length; i++) {
str += `<li>${arr[i]}</li>`
}
box.innerHTML = str;
var last_index = 0;
var timer = null;
start.onclick = function () {
if (timer) {
clearInterval(timer)
timer = null;
} else {
timer = setInterval(function () {
var index = getRandom(0, arr.length - 1);
var lis = document.querySelectorAll("ul.box>li");
lis[last_index].style.backgroundColor = "";
lis[index].style.backgroundColor = "green";
last_index = index;
}, 20)
}
}
function getRandom(n, m) {
return Math.floor(Math.random() * (m - n + 1) + n);
}