基于 HTML、CSS 与 JavaScript 的计时器

打印 上一主题 下一主题

主题 971|帖子 971|积分 2913

目次
1 前言
2 代码解析
2.1 HTML 布局分析
2.2 CSS 样式分析
2.3 JavaScript 功能分析
3 完备代码
4 运行结果
5 总结
5.1 界面设计
5.1.1 整体布局
5.1.2 样式美化
5.2 功能实现
5.2.1 时间格式化
5.2.2 计时逻辑
5.3 优势与应用场景
5.3.1 优势
5.3.2 应用场景


1 前言

在本日的技能分享中,我们将一起深入剖析一个利用 HTML、CSS 和 JavaScript 构建的通用计时器。这个计时器不光功能实用,而且界面炫酷,具有良好的相应式设计,适合各种场景利用。
通过这个通用计时器的实现,我们展示了 HTML、CSS 和 JavaScript 的强大功能。渴望这篇文章能对你有所帮助,让你在前端开发的道路上更进一步!

2 代码解析

2.1 HTML 布局分析



  • <!DOCTYPE html>:声明文档类型为 HTML5。
  • <html lang="zh-CN">:设置文档语言为中文。
  • <head>:包罗文档的元数据,如字符编码、视口设置、页面标题和内联样式表。
  • <body>:包罗页面的可见内容,包罗一个容器、计时器显示地域、按钮地域、结果显示地域和一个模态框。
2.2 CSS 样式分析



  • 全局样式:* 选择器将全部元素的外边距和内边距设置为 0,并利用 box-sizing: border-box 来确保元素的宽度和高度包罗内边距和边框。
  • 主体样式:设置主体的最小高度为视口高度,利用 Flexbox 布局将内容居中显示,并设置配景渐变。
  • 容器样式:利用半透明配景和模糊结果,设置圆角和阴影,使容器看起来更当代。
  • 标题样式:设置标题的字体大小、颜色和阴影,使其更加突出。
  • 按钮样式:设置按钮的配景渐变、圆角和阴影,添加悬停结果,增强用户交互性。
  • 模态框样式:默认隐蔽模态框,利用固定定位将其居中显示,设置配景和阴影。
  • 媒体查询:在小屏幕上调整容器、标题、计时器和按钮的样式,以提供更好的相应式体验。
2.3 JavaScript 功能分析



  • 变量声明:声明了 timer、startTime 变量,以及获取了计时器显示元素、结果显示元素和模态框元素。
  • formatTime 函数:将毫秒数转换为 HH:MM:SS 格式的字符串。
  • updateTimer 函数:计算从开始计时到当前时间的时间差,并更新计时器显示。
  • startTimer 函数:查抄计时器是否已经启动,假如没有,则记载开始时间,利用 setInterval 每秒调用一次 updateTimer 函数,显示模态框 2 秒后隐蔽,并清空结果显示地域。
  • stopTimer 函数:查抄计时器是否正在运行,假如是,则清除计时器,计算总计时长,并将结果显示在结果显示地域。
3 完备代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>通用计时器</title>
  7.     <style>
  8.         * {
  9.             margin: 0;
  10.             padding: 0;
  11.             box-sizing: border-box;
  12.         }
  13.         body {
  14.             min-height: 100vh;
  15.             display: flex;
  16.             justify-content: center;
  17.             align-items: center;
  18.             background: linear-gradient(135deg, #1a1a2e, #16213e);
  19.             font-family: 'Orbitron', sans-serif;
  20.             color: #fff;
  21.         }
  22.         .container {
  23.             background: rgba(255, 255, 255, 0.05);
  24.             backdrop-filter: blur(10px);
  25.             border-radius: 20px;
  26.             padding: 40px;
  27.             box-shadow: 0 0 40px rgba(0, 229, 255, 0.2);
  28.             width: 90%;
  29.             max-width: 500px;
  30.             text-align: center;
  31.             border: 1px solid rgba(255, 255, 255, 0.1);
  32.         }
  33.         h1 {
  34.             font-size: 2.5em;
  35.             margin-bottom: 30px;
  36.             text-transform: uppercase;
  37.             letter-spacing: 2px;
  38.             color: #00e5ff;
  39.             text-shadow: 0 0 10px rgba(0, 229, 255, 0.5);
  40.         }
  41.         #timer {
  42.             font-size: 4em;
  43.             margin-bottom: 40px;
  44.             color: #fff;
  45.             text-shadow: 0 0 20px rgba(255, 255, 255, 0.3);
  46.         }
  47.         .buttons {
  48.             display: flex;
  49.             justify-content: center;
  50.             gap: 20px;
  51.         }
  52.         button {
  53.             padding: 15px 40px;
  54.             font-size: 1.2em;
  55.             border: none;
  56.             border-radius: 50px;
  57.             background: linear-gradient(45deg, #00e5ff, #007bff);
  58.             color: white;
  59.             cursor: pointer;
  60.             transition: all 0.3s ease;
  61.             box-shadow: 0 0 15px rgba(0, 229, 255, 0.4);
  62.         }
  63.         button:hover {
  64.             transform: translateY(-3px);
  65.             box-shadow: 0 0 25px rgba(0, 229, 255, 0.6);
  66.         }
  67.         #result {
  68.             margin-top: 30px;
  69.             font-size: 1.5em;
  70.             color: #00e5ff;
  71.         }
  72.         .modal {
  73.             display: none;
  74.             position: fixed;
  75.             top: 50%;
  76.             left: 50%;
  77.             transform: translate(-50%, -50%);
  78.             background: rgba(0, 0, 0, 0.9);
  79.             padding: 30px;
  80.             border-radius: 15px;
  81.             color: #00e5ff;
  82.             font-size: 1.5em;
  83.             box-shadow: 0 0 30px rgba(0, 229, 255, 0.5);
  84.             z-index: 1000;
  85.         }
  86.         @media (max-width: 480px) {
  87.             .container {
  88.                 padding: 20px;
  89.             }
  90.             h1 {
  91.                 font-size: 1.8em;
  92.             }
  93.             #timer {
  94.                 font-size: 2.5em;
  95.             }
  96.             button {
  97.                 padding: 10px 30px;
  98.                 font-size: 1em;
  99.             }
  100.         }
  101.     </style>
  102. </head>
  103. <body>
  104.     <div class="container">
  105.         <h1>通用计时器</h1>
  106.         <div id="timer">00:00:00</div>
  107.         <div class="buttons">
  108.             <button onclick="startTimer()">开始计时</button>
  109.             <button onclick="stopTimer()">结束计时</button>
  110.         </div>
  111.         <div id="result"></div>
  112.     </div>
  113.     <div id="modal" class="modal">计时已开始!</div>
  114.     <script>
  115.         let timer;
  116.         let startTime;
  117.         const timerDisplay = document.getElementById('timer');
  118.         const resultDisplay = document.getElementById('result');
  119.         const modal = document.getElementById('modal');
  120.         function formatTime(ms) {
  121.             let seconds = Math.floor(ms / 1000);
  122.             let minutes = Math.floor(seconds / 60);
  123.             let hours = Math.floor(minutes / 60);
  124.             seconds = seconds % 60;
  125.             minutes = minutes % 60;
  126.             return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
  127.         }
  128.         function updateTimer() {
  129.             const currentTime = Date.now();
  130.             const elapsed = currentTime - startTime;
  131.             timerDisplay.textContent = formatTime(elapsed);
  132.         }
  133.         function startTimer() {
  134.             if (!timer) {
  135.                 startTime = Date.now();
  136.                 timer = setInterval(updateTimer, 1000);
  137.                 modal.style.display = 'block';
  138.                 setTimeout(() => {
  139.                     modal.style.display = 'none';
  140.                 }, 2000);
  141.                 resultDisplay.textContent = '';
  142.             }
  143.         }
  144.         function stopTimer() {
  145.             if (timer) {
  146.                 clearInterval(timer);
  147.                 timer = null;
  148.                 const endTime = Date.now();
  149.                 const totalTime = endTime - startTime;
  150.                 resultDisplay.textContent = `总计时长: ${formatTime(totalTime)}`;
  151.             }
  152.         }
  153.     </script>
  154. </body>
  155. </html>
复制代码
4 运行结果

      
       通用计时器       5 总结

5.1 界面设计

5.1.1 整体布局

通过 HTML 的布局搭建,我们创建了一个简洁明了的界面。重要包罗一个标题、计时器显示地域、开始和结束计时按钮,以及结果显示地域。整个界面被包裹在一个容器中,利用 Flexbox 布局将内容垂直和水平居中显示,确保在不同设备上都能完善呈现。
5.1.2 样式美化

利用 CSS 为界面添加了炫酷的结果。配景采用渐变颜色,营造出科技感十足的氛围。容器利用半透明配景和模糊结果,结合圆角和阴影,使界面看起来更加当代和专业。按钮利用渐变配景和悬停结果,增强了用户交互性。同时,利用媒体查询对小屏幕设备举行适配,确保在手机等设备上也能有良好的视觉体验。
5.2 功能实现

5.2.1 时间格式化

JavaScript 中的 formatTime 函数将毫秒数转换为 HH:MM:SS 格式的字符串,方便用户查看。通过简单的数学计算和字符串处理,确保时间显示的精确性和规范性。
5.2.2 计时逻辑

startTimer 函数用于启动计时器。在启动时,记载当前时间作为开始时间,并利用 setInterval 每秒调用一次 updateTimer 函数来更新计时器显示。同时,显示一个模态框提示用户计时已开始,2 秒后自动隐蔽。
stopTimer 函数用于停止计时器。在停止时,清除计时器,记载结束时间,计算总计时长,并将结果显示在结果显示地域。
5.3 优势与应用场景

5.3.1 优势



  • 代码简洁:利用 HTML、CSS 和 JavaScript 原生代码实现,无需引入额外的库,易于理解和维护。
  • 相应式设计:通过媒体查询,界面在不同设备上都能自适应显示,提供一致的用户体验。
  • 交互性强:按钮的悬停结果和模态框的提示功能,增强了用户与界面的交互性。
5.3.2 应用场景



  • 运动计时:在健身、跑步等运动场景中,记载运动时间。
  • 学习计时:在学习过程中,记载学习时长,提高学习服从。
  • 游戏计时:在游戏中,设置倒计时或记载游戏时间。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表