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

js实现点击音频实现播放功能

目录

1. HTML 部分:音频播放控件

2. CSS 部分:样式设置

3. JavaScript 部分:音频控制

播放和暂停音频:

倒计时更新:

播放结束后自动暂停:

4. 总结:

完整代码:


今天通过 HTML、CSS 和 JavaScript 模拟一个简易的音频播放器。它使用了基本的音频控制逻辑,并结合 jQuery 来管理用户的交互。让我们来详细解读这段代码。

1. HTML 部分:音频播放控件

首先,我们的 HTML 结构非常简单,它包含一个带有播放按钮和时间显示的 <div> 元素。

<div class="audioDiv" id="playButton"><img src="./img/yuyin.png" alt="播放图标" /><p id="countdown">4:31</p><p id="bofang">播放录音</p>
</div>

  • <div class="audioDiv" id="playButton">: 这是外部容器,采用了 flex 布局,保证了内容在水平方向上居中对齐,并且背景色是浅灰色。这个容器用来显示音频播放控件。

  • <img src="./img/yuyin.png" alt="播放图标" />: 这是播放按钮,显示一个播放图标。它会作为按钮,用户点击它时会触发音频的播放。

  • <p id="countdown">4:31</p>: 用来显示音频剩余时间的倒计时。初始值为 4 分 31 秒,即音频的总时长。

  • <p id="bofang">播放录音</p>: 这是文本提示,表明这个按钮的功能是播放录音。

2. CSS 部分:样式设置

CSS 主要负责设置播放器的外观和布局。通过以下样式,确保了播放器的基本功能和用户体验:

.audioDiv {display: flex;align-items: center;width: 204px;height: 29px;background-color: #a0a0a0;border-radius: 9px;padding: 10px;cursor: pointer;
}
  • display: flex 让内部元素(图标、倒计时和文本)水平排列并居中。
  • background-color: #a0a0a0 设置播放器背景色为灰色,给人简洁的视觉效果。
  • border-radius: 9px 使播放器的边缘呈圆角。

此外,按钮的样式(包括图片大小、文本的显示等)都确保了控件的清晰和简洁。

3. JavaScript 部分:音频控制

JavaScript 是实现音频播放功能的核心部分。在这里,我们通过 jQuery 处理了音频播放和倒计时的更新。以下是关键逻辑:

播放和暂停音频:
  • 当用户点击播放按钮时,如果音频尚未播放(audioStatus === true),我们会调用 audio.play() 开始播放音频,同时启动倒计时。
  • 如果音频正在播放(audioStatus === false),则暂停音频,并重置倒计时为初始状态(4:31)。
倒计时更新:
function player() {let m = 4;let s = 31;times = setInterval(function() {if (s < 10) {$('#countdown').html(m + ':0' + s);} else {$('#countdown').html(m + ':' + s);}s--;if (s < 0) {s = 59;m--;}}, 1000);
}
  • 我们使用 setInterval 每秒更新倒计时。初始时设定倒计时为 4 分 31 秒,并逐秒减少。
  • 当秒数小于 10 时,倒计时格式会是 4:09 这样,而不是 4:9,确保时间格式一致。
播放结束后自动暂停:
setTimeout(function() {audio.currentTime = 0;audio.pause();$('#countdown').html('4:31');audioStatus = true;
}, 271000);
  • setTimeout 在音频播放完毕后会将音频暂停,并重置倒计时显示为初始状态。
     

4. 总结:

这段代码实现了一个基本的音频播放器界面,并添加了自定义的倒计时功能。当用户点击播放按钮时,音频将开始播放,同时倒计时更新。通过清晰简洁的设计,用户可以随时了解音频的播放进度,并控制播放/暂停。这个小项目展示了如何使用 HTML、CSS 和 JavaScript 来实现一个自定义音频控件,并提供了一些交互和视觉反馈。

这个功能可以在许多应用场景中使用,如学习平台、在线课程、音频播客等,提升用户的互动体验。

完整代码:

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="http://www.yourdomain.com/js/jquery-3.7.1.min.js"></script><style>/* 模拟audio标签的样式 */.audioDiv {display: flex;align-items: center;width: 204px;height: 29px;background-color: #a0a0a0;border-radius: 9px;padding: 10px;cursor: pointer;}/* 播放按钮 */#playButton img {width: 30px;height: 30px;cursor: pointer;}/* 时间显示 */#countdown {margin-left: 10px;font-size: 14px;width: 45px;}/* 播放文本 */#bofang {font-size: 14px;color: #333;margin-left: 10px;}/* 控制器样式 */#playButton:hover {opacity: 0.8;}</style></head><body><div class="audioDiv" id="playButton"><img src="./img/yuyin.png" alt="播放图标" /><p id="countdown">4:31</p><p id="bofang">播放录音</p></div><script>let audio = new Audio('./img/道姑朋友.mp3');//音频自己本地插入let audioStatus = true;let times;// 播放录音功能$('#playButton').on('click', function() {if (audioStatus === true) {audio.play();player();audioStatus = false;} else {audio.currentTime = 0;audio.pause();clearInterval(times);$('#countdown').html('4:31');audioStatus = true;}setTimeout(function() {audio.currentTime = 0;audio.pause();$('#countdown').html('4:31');audioStatus = true;}, 271000); // 播放完后暂停(4分钟31秒)});function player() {let m = 4;let s = 31;times = setInterval(function() {if (s < 10) {// 如果秒数少于10,在前面加上0$('#countdown').html(m + ':0' + s);} else {$('#countdown').html(m + ':' + s);}s--;if (s < 0) {// 如果秒数少于0,就变成59秒s = 59;m--;}}, 1000);}</script></body>
</html>

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

相关文章:

  • matlab平面波展开法计算的二维声子晶体带隙
  • Spring Boot (maven)分页3.0版本 通用版
  • 解决DeepSeek服务器繁忙问题
  • 小项目第一天
  • 家里WiFi信号穿墙后信号太差怎么处理?
  • 教育小程序+AI出题:如何通过自然语言处理技术提升题目质量
  • SpringMVC新版本踩坑[已解决]
  • 一款利器提升 StarRocks 表结构设计效率
  • 老牌软件,如今依旧坚挺
  • Plaid | 数据库切换历程:从 AWS Aurora MySQL 到 TiDB 的迁移之旅
  • MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
  • Python学习心得字符串拼接的几种方法
  • USB2.03.0摄像头区分UVC相机在linux中的常用命令
  • electron 学习
  • 美术教程2025
  • CPT205 计算机图形学 OpenGL 3D实践(CW2)
  • 基于单片机的开关电源设计(论文+源码)
  • autogen_core中的DataclassJsonMessageSerializer类
  • floodfill算法系列一>太平洋大西洋水流问题
  • DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)
  • JavaScript 内置对象-Math对象
  • 硕成C语言22【一些算法和数组的概念】
  • Halcon相机标定
  • 部门管理(体验,最原始方法来做,Django+mysql)
  • clickhouse集群搭建
  • 250214-java类集框架
  • 二叉树(C语言版)
  • ASP.NET Core 面试宝典【刷题系列】
  • 案例-02.部门管理-查询
  • src和href区别