1. 概述

点名器应用是一个简单的网页工具,用于从一个包含多个名字的文本文件中随机挑选一个名字,并将其显示在网页上。用户可以通过上传一个文本文件,点击按钮来触发随机点名操作。

(作品示意图)

2. 功能

上传文件:用户上传一个包含名字的文本文件(如 .txt 文件),文件中的名字以空格或换行符分隔。

随机点名:点击“点名”按钮时,系统会从文件中的名字列表中随机选择一个名字并显示。

名字展示:随机选择的名字将在页面上以动画效果显示。

3. 技术栈

HTML:构建页面结构。

CSS:页面样式和动画效果。

JavaScript:处理文件上传、数据解析和随机点名的逻辑。

4. HTML 结构

以下是页面的基本结构和主要元素:

<div class="container">
  <input type="file" id="fileInput" accept=".txt" />
  <button id="callNameButton">点名</button>
</div>

 

div.container:包含上传文件控件和按钮的容器。

input[type="file"]:用于上传文件,接受 .txt 格式的文件。

button#callNameButton:点击按钮触发点名功能。

5. CSS 样式

body {
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  background-color: #eef2f3;
  display: flex;
  height: 100vh;
  justify-content: center;
  align-items: center;
  margin: 0;
}

.container {
  background-color: #ffffff;
  padding: 30px 40px;
  border-radius: 10px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  text-align: center;
  position: relative;
}

body:设置页面的整体布局,使用 flex 布局让容器居中显示。

container:为上传文件区域和按钮提供一个背景色、内边距、圆角边框及阴影效果,使界面看起来更加简洁且现代。

input[type="file"] {
  margin-bottom: 20px;
  padding: 10px;
  border: 2px dashed #ccc;
  border-radius: 5px;
  cursor: pointer;
  transition: border-color 0.3s;
}
input[type="file"]:hover {
  border-color: #007BFF;
}

input[type="file"]:设置上传文件控件的样式,使其具有虚线边框,鼠标悬停时改变边框颜色。

button {
  padding: 10px 20px;
  background-color: #007BFF;
  color: #ffffff;
  border: none;
  border-radius: 5px;
  font-size: 16px;
  cursor: pointer;
  transition: background-color 0.3s;
}
button:hover {
  background-color: #0056b3;
}

button:为点名按钮设置背景色、文字颜色、圆角、内边距,并提供鼠标悬停时的颜色过渡效果。

.name-display {
  margin-top: 20px;
  font-size: 2em;
  color: #333;
  opacity: 0;
  transform: scale(0);
  animation: fadeInScale 1s forwards;
}
@keyframes fadeInScale {
  to {
    opacity: 1;
    transform: scale(1);
  }
}

name-display:设置名字显示区域的样式,使用 keyframes 实现名字显示时的动画效果(淡入并放大)。

6. JavaScript 逻辑

JavaScript 部分实现了文件读取、数据解析、随机选择名字以及名字展示的核心功能。

document.addEventListener('DOMContentLoaded', function() {
  var names = [];
  var nameDisplay; // 用于存储当前显示的名字元素

 

names:用于存储从文件中读取的名字列表。

nameDisplay:用于保存当前显示的名字元素,以便在显示新名字时进行替换。

function handleFileSelect(event) {
  var file = event.target.files[0];
  if (!file) return;
  var reader = new FileReader();
  reader.onload = function(e) {
    names = e.target.result.trim().split(/\s+/);
  };
  reader.readAsText(file);
}

handleFileSelect:处理文件选择的事件,利用 FileReader API 读取上传的文本文件。当文件读取完成时,将其内容按空格或换行符分割成名字数组,保存在 names 数组中。

function callRandomName() {
  if (names.length === 0) {
    alert('名字列表为空,请先选择一个包含名字的文本文件!');
    return;
  }
  var randomIndex = Math.floor(Math.random() * names.length);
  var randomName = names[randomIndex];
  showName(randomName);
}

callRandomName:点击点名按钮时触发该函数。如果 names 数组为空(即未上传文件),弹出提示框。否则,随机选择一个名字并调用 showName 函数展示该名字。

function showName(name) {
  // 如果之前有名字显示元素,先移除它
  if (nameDisplay) {
    nameDisplay.remove();
  }

  // 创建新的名字显示元素
  nameDisplay = document.createElement('div');
  nameDisplay.className = 'name-display';
  nameDisplay.textContent = name;
  document.querySelector('.container').appendChild(nameDisplay);
}

showName:该函数用于在页面上显示随机选择的名字。首先移除之前显示的名字元素(如果有的话),然后创建一个新的 div 元素,设置其文本为随机选择的名字,最后将其添加到页面中。

document.getElementById('fileInput').addEventListener('change', handleFileSelect);
document.getElementById('callNameButton').addEventListener('click', callRandomName);

7. 总结

这个点名器网页应用通过简洁的界面和交互逻辑,帮助用户从一个文本文件中读取名字并随机点名。使用了现代的前端技术,如文件处理、DOM 操作、CSS 动画等,使得用户体验更加流畅。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐