0

0

将播放/暂停按钮合并为单个切换按钮

聖光之護

聖光之護

发布时间:2026-01-21 14:55:03

|

545人浏览过

|

来源于php中文网

原创

将播放/暂停按钮合并为单个切换按钮

本文教你如何将两个独立的“开始”和“暂停”按钮整合为一个动态切换的按钮,点击时自动在播放(▶)与暂停(⏸)图标间切换,并正确控制计时器启停状态。

实现单按钮切换控制的核心在于引入一个状态标识变量(如 isRunning),用于实时追踪计时器当前是运行中还是已暂停。在此基础上,统一监听该按钮的点击事件,并根据状态执行对应逻辑:若正在运行,则清除定时器、更新状态、切换图标为播放;若已停止,则启动计时器、更新状态、切换图标为暂停。

此外,原代码中使用 var 声明全局变量存在作用域污染和变量提升风险,我们推荐改用 let(块级作用域)以提升代码健壮性。同时,图标切换不再依赖 DOM 重写或 innerHTML 操作,而是通过现代 Web API 的 element.classList.replace() 方法精准替换 Font Awesome 类名,既高效又语义清晰。

以下是完整可运行的优化实现:

清爽简单的HTML5音乐播放器
清爽简单的HTML5音乐播放器

这是一款清爽简单的 HTML5 音乐播放器,一个简洁的播放器包含了转动的封面,有 3 个主要的按钮,分别为「上一首」、「播放/暂停」和「下一首」,点击或拖动进度条也可以控制播放进度。

下载



00:
00:
00

let hours = 0;
let mins = 0;
let seconds = 0;
let timer = null; // 使用 null 更明确表示“无定时器”
let isRunning = false;

const startStopBtn = document.getElementById('startStop');

startStopBtn.addEventListener('click', function() {
  if (isRunning) {
    clearTimeout(timer);
    isRunning = false;
    startStopBtn.querySelector("i").classList.replace("fa-pause", "fa-play");
  } else {
    startTimer();
    isRunning = true;
    startStopBtn.querySelector("i").classList.replace("fa-play", "fa-pause");
  }
});

function startTimer() {
  timer = setTimeout(function() {
    seconds++;

    if (seconds > 59) {
      seconds = 0;
      mins++;

      if (mins > 59) {
        mins = 0;
        hours++;
        $("#hours").text(hours < 10 ? '0' + hours + ':' : hours + ':');
      }

      $("#mins").text(mins < 10 ? '0' + mins + ':' : mins + ':');
    }

    $("#seconds").text(seconds < 10 ? '0' + seconds : seconds);
    startTimer(); // 递归调用实现持续计时
  }, 1000);
}

关键注意事项:

  • 确保
  • timer 初始设为 null,并在 clearTimeout() 前无需判空(clearTimeout(null) 安全无副作用);
  • classList.replace() 要求浏览器支持(现代浏览器均兼容),若需兼容 IE,请改用 className 手动切换;
  • 计时逻辑中避免重复操作 DOM —— 所有时间显示均通过 jQuery .text() 统一更新,保持一致性;
  • 递归 setTimeout 虽简洁,但长期运行可能存在微小时间漂移;生产环境建议改用 setInterval + clearInterval 并配合时间戳校准。

通过以上改造,你获得了一个语义清晰、状态可控、图标自适应的单按钮计时控制器,兼顾可读性、可维护性与用户体验。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

150

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

394

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

501

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

181

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

120

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

174

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

35

2026.01.13

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

CSS教程
CSS教程

共754课时 | 21.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号