当前位置: 首页 > news >正文

基于js和html的点名应用

分享一个在课堂或者是公司团建上需要点名的应用程序,开箱即用。

1、双击打开后先选择人员名单(可以随时更改的)

2、下面的滚动速度可以根据需求调整

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>水浒传随机点名器</title>
<style>body {font-family: 'Segoe UI', sans-serif;text-align: center;padding: 20px;background: linear-gradient(135deg, #2C3E50, #4CA1AF);color: #fff;height: 100vh;display: flex;flex-direction: column;justify-content: center;}h1 {font-size: 36px;margin-bottom: 20px;text-shadow: 2px 2px 4px rgba(0,0,0,0.6);}input[type="file"], button {margin: 10px;padding: 10px 20px;font-size: 18px;border: none;border-radius: 8px;cursor: pointer;background: #fff;color: #333;box-shadow: 2px 2px 6px rgba(0,0,0,0.3);transition: 0.2s;}input[type="file"]:hover, button:hover {transform: scale(1.05);}#result {font-size: 48px;font-weight: bold;margin-top: 30px;min-height: 60px;}.nickname {color: gold;text-shadow: 0 0 6px rgba(255,215,0,0.8);margin-right: 10px;}.realname {color: white;text-shadow: 0 0 8px rgba(255,255,255,0.9);}.highlight {animation: flash 0.6s alternate infinite;}@keyframes flash {from { transform: scale(1); }to { transform: scale(1.2); }}.slider-container {margin-top: 15px;font-size: 16px;}
</style>
</head>
<body><h1>🏹 水浒108将随机点名器 🐯</h1><input type="file" id="csvFile" accept=".csv"><button id="toggleBtn" disabled>开始</button><div class="slider-container">滚动速度(毫秒/次):<span id="speedValue">100</span><input type="range" id="speedSlider" min="20" max="500" value="100"></div><div id="result">请先上传名单</div><script>
let students = [];
let rollingInterval = null;
let isRolling = false;
let speed = 100; // 初始速度// 解析 CSV 文件
document.getElementById('csvFile').addEventListener('change', function(e) {const file = e.target.files[0];if (!file) return;const reader = new FileReader();reader.onload = function(event) {const text = event.target.result;students = parseCSV(text);if (students.length > 0) {document.getElementById('toggleBtn').disabled = false;document.getElementById('result').textContent = `已加载 ${students.length} 人`;} else {document.getElementById('result').textContent = "CSV 文件没有有效数据";}};reader.readAsText(file, 'utf-8');
});// 滚动速度滑块
document.getElementById('speedSlider').addEventListener('input', function() {speed = parseInt(this.value);document.getElementById('speedValue').textContent = speed;if (isRolling) {clearInterval(rollingInterval);startRolling();}
});// 开始/暂停按钮
document.getElementById('toggleBtn').addEventListener('click', function() {if (students.length === 0) return;if (!isRolling) {startRolling();this.textContent = "暂停";} else {stopRolling();this.textContent = "开始";}isRolling = !isRolling;
});// 开始滚动
function startRolling() {rollingInterval = setInterval(() => {const randomIndex = Math.floor(Math.random() * students.length);displayName(students[randomIndex]);}, speed);
}// 停止滚动并高亮显示最终结果
function stopRolling() {clearInterval(rollingInterval);const finalName = document.getElementById('result').textContent;const nameParts = finalName.split(/\s+/);if (nameParts.length === 2) {document.getElementById('result').innerHTML =`<span class="nickname highlight">${nameParts[0]}</span><span class="realname highlight">${nameParts[1]}</span>`;}
}// 解析 CSV
function parseCSV(text) {return text.split('\n').map(line => line.trim()).filter(line => line.length > 0);
}// 显示带颜色的名字
function displayName(fullName) {const parts = fullName.split(/\s+/);if (parts.length === 2) {document.getElementById('result').innerHTML =`<span class="nickname">${parts[0]}</span><span class="realname">${parts[1]}</span>`;} else {document.getElementById('result').textContent = fullName;}
}
</script>
</body>
</html>

http://www.lryc.cn/news/619757.html

相关文章:

  • 【电气】NPN与PNP
  • B系列树详细讲解
  • 16-docker的容器监控方案-prometheus实战篇
  • Python 类元编程(导入时和运行时比较)
  • Windows也能用!Claude Code硬核指南
  • [激光原理与应用-259]:理论 - 几何光学 - 平面镜的反射、平面透镜的折射、平面镜的反射成像、平面透镜的成像的规律
  • 网刻软件iVentoy软件使用方法
  • @进程管理工具 - Glances工具详细指南
  • Django REST Framework视图
  • Java 大视界 -- Java 大数据机器学习模型在金融资产配置优化与风险收益平衡中的应用(395)
  • 解惑rust中的 Send/Sync(译)
  • 基于Java的Markdown转Word工具(标题、段落、表格、Echarts图等)
  • 18.10 SQuAD数据集实战:5步高效获取与预处理,BERT微调避坑指南
  • 实战多屏Wallpaper壁纸显示及出现黑屏问题bug分析-学员作业
  • HTML <iframe> 标签 如何把html写入iframe标签
  • 版图设计学习2_掌握PDK中的层定义(工艺文档精读)
  • Spring Boot 集成 机器人指令中枢ROS2工业机械臂控制网关
  • 如何在 Spring Boot 中设计和返回树形结构的组织和部门信息
  • 大致计算服务器磁盘使用情况脚本
  • GNhao/GN号,海外SIM号怎么获取的步骤指南
  • npm install 的作用
  • Android实现Glide/Coil样式图/视频加载框架,Kotlin
  • 【KO】Android 网络相关面试题
  • 华为 HCIE 大数据认证中 Linux 命令行的运用及价值
  • 安装Win10怎样跳过欢迎界面
  • 数字货币的去中心化:重构价值交换的底层逻辑​
  • uniapp微信小程序-登录页面验证码的实现(springboot+vue前后端分离)EasyCaptcha验证码 超详细
  • Lombok插件介绍及安装(Eclipse)
  • Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
  • Day51--图论--99. 岛屿数量(卡码网),100. 岛屿的最大面积(卡码网)