js实现一个随机选英雄的效果,点击一下开始抽英雄,再点击就停止通过渲染来实现
时间: 2024-05-14 22:20:05 浏览: 21
可以通过以下步骤实现:
1. 准备英雄列表数据,可以使用数组来存储每个英雄的信息,包括名称、头像等。
2. 在页面上添加一个按钮,用于触发抽奖的操作。
3. 给按钮添加一个点击事件,当点击按钮时,开始随机选英雄。
4. 在事件处理函数中,使用 setInterval 函数来定时切换英雄,即每隔一段时间就将当前选中的英雄换成下一个英雄。
5. 在切换英雄时,可以使用 Math.random() 函数来随机选取下一个英雄。
6. 当再次点击按钮时,停止随机选英雄,即清除 setInterval 函数。
7. 最后,将选中的英雄显示在页面上。
以下是一个示例代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>随机选英雄</title>
</head>
<body>
<div id="heroes">
<div class="hero">
<img src="hero1.jpg" alt="英雄1">
<span>英雄1</span>
</div>
<div class="hero">
<img src="hero2.jpg" alt="英雄2">
<span>英雄2</span>
</div>
<div class="hero">
<img src="hero3.jpg" alt="英雄3">
<span>英雄3</span>
</div>
<div class="hero">
<img src="hero4.jpg" alt="英雄4">
<span>英雄4</span>
</div>
</div>
<button id="btn">开始抽英雄</button>
<script>
var heroes = [
{ name: '英雄1', image: 'hero1.jpg' },
{ name: '英雄2', image: 'hero2.jpg' },
{ name: '英雄3', image: 'hero3.jpg' },
{ name: '英雄4', image: 'hero4.jpg' }
];
var intervalId = null;
var currentIndex = -1;
function start() {
// 如果已经在抽奖中,则不做任何操作
if (intervalId) return;
var btn = document.getElementById('btn');
btn.innerHTML = '停止抽英雄';
intervalId = setInterval(function() {
// 获取下一个英雄的索引
var index = Math.floor(Math.random() * heroes.length);
// 如果选中的英雄和上一个选中的英雄相同,则跳过
if (index === currentIndex) return;
currentIndex = index;
// 更新页面上显示的选中英雄的信息
var selectedHero = document.querySelector('.selected');
if (selectedHero) selectedHero.classList.remove('selected');
var hero = document.querySelectorAll('.hero')[index];
hero.classList.add('selected');
}, 100);
}
function stop() {
// 如果不在抽奖中,则不做任何操作
if (!intervalId) return;
var btn = document.getElementById('btn');
btn.innerHTML = '开始抽英雄';
clearInterval(intervalId);
intervalId = null;
}
var btn = document.getElementById('btn');
btn.addEventListener('click', function() {
if (intervalId) {
stop();
} else {
start();
}
});
</script>
<style>
#heroes {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
.hero {
display: flex;
flex-direction: column;
align-items: center;
margin: 20px;
}
.selected {
border: 5px solid red;
}
</style>
</body>
</html>
```
在上述代码中,我们使用了 setInterval 函数来定时切换英雄,并使用 clearInterval 函数来停止定时器。同时,我们使用 CSS 样式来为选中的英雄添加了一个红色边框,以便更好地显示当前选中的英雄。