You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
3.7 KiB

// 1.将数据渲染到页面上
/** @type {HTMLElement} */
let content = document.querySelector('#content')
students.forEach(function (item, i) {
let div = document.createElement('div')
div.classList.add('cell')
div.innerHTML = item
content.appendChild(div)
})
// 点击开始按钮
/** @type {HTMLElement} */
let start = document.querySelector('#start')
/** @type {HTMLElement} 被选中的小伙伴 */
let selectedName = document.querySelector('#selectTitle span')
/** 被选中的小伙伴们 */
let selectedArr = []
/** 未被选中的小伙伴们的下标 */
let UnSelectedIndex = students.map(function (item, i) {
return i
})
/** 正在点名,防止多次点击 */
let isRunning = false
// 点击开始按钮点名
start.onclick = function () {
if (isRunning) {
return 0
}
if (UnSelectedIndex.length === 0) {
alert('当前所有同学都已经被选中!')
return 0
}
/** @type {HTMLElement[]} 获取页面所有名字元素 */
let items = document.querySelectorAll('.cell')
/** 已选中项的下标 */
let index = -1
/** 计数器 */
let count = 8
// 设置计时器
let timer = setInterval(function () {
isRunning = true
// 获取随机数
index = Math.floor(Math.random() * UnSelectedIndex.length)
if (document.querySelector('.cell.active')) {
document.querySelector('.cell.active').classList.remove('active')
}
items[UnSelectedIndex[index]].classList.add('active')
// 点名完成,清除计时器
if (count <= 0) {
isRunning = false
items[UnSelectedIndex[index]].classList.add('selected')
selectedArr.push(students[UnSelectedIndex[index]])
selectedName.innerHTML = selectedArr.toString()
UnSelectedIndex.splice(index, 1)
clearInterval(timer)
}
count--
}, 100)
}
// 假设students数组已经在data.js中定义
// const students = [...]; // 学生名单
// 假设students数组已经在data.js中定义
// const students = [...]; // 学生名单
// 假设students数组已经在data.js中定义
// const students = [...]; // 学生名单
// 获取页面元素
const selectedStudentSpan = document.getElementById('selectedStudent');
const scoreSpan = document.getElementById('score');
const startButton = document.getElementById('start');
const resetButton = document.getElementById('reset'); // 假设重置按钮的id为'reset'
const contentDiv = document.getElementById('content');
// 初始化积分变量
let score = 0;
// 更新点到的人和积分显示的函数
function updateDisplay(selectedStudent) {
selectedStudentSpan.textContent = selectedStudent ? selectedStudent + ' 被点到' : '当前没有被点到的小伙伴';
scoreSpan.textContent = '当前积分: ' + score;
}
// 点名逻辑
startButton.addEventListener('click', () => {
if (students.length === 0) {
alert('没有学生名单!');
return;
}
// 随机选择一个学生
const randomIndex = Math.floor(Math.random() * students.length);
const selectedStudent = students[randomIndex];
// 更新页面显示
updateDisplay(selectedStudent);
// 更新积分
score += 1;
updateDisplay(); // 重新调用updateDisplay以更新积分显示
});
// 重置积分的函数
function resetScore() {
score = 0;
updateDisplay(''); // 清空被点到的学生显示,并更新积分
students.length = 0; // 清空学生名单,允许重复点名
}
// 重置按钮的点击事件监听器
if (resetButton) {
resetButton.addEventListener('click', resetScore);
}
// 初始化页面显示
updateDisplay('');