作者:白狼 出处:http://www.manks.top/article/h5_audio本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如何在网页上进行音频的播放?话题挺高大上,实际上的开发工作确实非常easy,只需要利用html5的一个标签audio即可。

网页上大多数音频一般是通过插件falsh播放的。但是,并不是所有的浏览器对其都支持。

html5 规定了通过audio元素来包含音频的标准方法。

当前audio支持的音频格式以及具体细节,可参考w3c标准。本文我们来看看具体实现以及一些有处理。

我们首先做一个简单的实现,播放单个语音。

//html

<button class="btn audio">
播放语音
<audio src="音频地址"></audio>
</button>

  

//javascript

$(".audio").on("click", function () {
var $this = $(this),
$audio = $this.find("audio");
$audio.get(0).play();
});

对,你没有看错,就是这么简单。

但是,想象一下我们现在的场景就是类似微信的聊天页面,一个页面大概有多个播放语音的按钮,还用上面的代码实现,你可以播放一下试试看。

效果不出所料的话所点击的音频会同时进行播放。

这显然不是我们所要的。我们目前的实现方法是标记一个播放状态,播放任意一个音频之前判断该状态,如果该状态显示正在播放,只需要将其暂停,然后再播放新的音频即可。

我们来看看具体实现。

var playing = false, currentAudio = null;
$(".audio").on("click", function () {
var $audio = $(this).find("audio");
if (playing) {
playing = false;
currentAudio.pause();
currentAudio.currentTime = 0;
currentAudio = null;
}
playing = true;
currentAudio = $audio.get(0);
currentAudio.play();
});

这次就如愿了,在多音频的状态下实现了播放单个音频不冲突的问题了。

问题总是那么多,尖锐的矛盾也随之而来。

打开firebug,我们切换到Network栏看看,实际上我们的多个音频在页面上也是进行了加载,这样用户打开我们的网页就会非常耗时,在网络不好的情况下效果估计会更差。

我们来看看如何在不影响效果的前提下进行优化。

①、我们对audio进行了优化,实际的播放地址用属性存储

②、如此的话我们就有必要简单的修改下javascript代码即可

来看看具体实现

//html
<button class="btn audio">
播放语音
<audio data-src="音频地址"></audio>
</button>
<button class="btn audio">
播放语音
<audio data-src="音频地址"></audio>
</button>
//javascript
var playing = false, currentAudio = null;
$(".audio").on("click", function () {
var $audio = $(this).find("audio");
$audio.attr("src", $audio.data("src"));
if (playing) {
playing = false;
currentAudio.pause();
currentAudio.currentTime = 0;
currentAudio = null;
}
playing = true;
currentAudio = $audio.get(0);
currentAudio.play();
});

简单吧,我们只增加了一行代码 $audio.attr("src", $audio.data("src")); 对于要播放的我们在点击后才去加载。

我们打开firebug-Network验证下,确实是点击后才进行加载,这样就达到我们优化的效果了。

有小伙伴想问了,我想实现像百度mp3的播放那样,有播放倒计时。因为不属于我们本文主题,具体细节实现可参考w3caudio属性currentTime即可

简单谈谈如何利用h5实现音频的播放的更多相关文章

  1. H5页面音频自动播放问题

        最近有这么一个需求,需要在手机加载一个页面的时候,自动播放音乐资源.一般情况下,这个问题也就解决了,但是要保证各种手机上表现一致,那就相当困难了,至少要费点儿周折.       下面有三种常规 ...

  2. 【转】简单谈谈python的反射机制

    [转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...

  3. H5 <audio> 音频标签自定义样式修改以及添加播放控制事件

    H5 <audio> 音频标签自定义样式修改以及添加播放控制事件 Dandelion_drq 关注 2017.08.28 14:48* 字数 331 阅读 2902评论 3喜欢 3 说明: ...

  4. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  5. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  6. Chimee - 简单易用的H5视频播放器解决方案

    Chimee是由奇舞团开源的一套H5视频播放器解决方案,由奇舞团视频云前端团队结合在业务和视频编解码方向的沉淀积累倾心打造.Chimee支持MP4.M3U8.FLV等多种媒体格式,同时它也帮我们解决了 ...

  7. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  8. java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

    java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类 ...

  9. 利用H5缓存机制实现点击按钮第一次与之后再点击分别跳转不同页面

    昨天碰到这样一个需求,要求点击按钮第一次跳转到a页面,之后再点击它就跳转到b页面.这个问题我首先就想到了利用H5的缓存sessionstorage来实现,SessionStorage用于本地存储一个会 ...

随机推荐

  1. 浅谈CPU和GPU的区别

    导读: CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,而GPU面对的则是类型高度统一的.相互无依赖的大规模数据 ...

  2. java的各种使用小知识点总结。

    9,重写Arrays.sort public int getHeight(int[][] actors, int n) { // write code here if (null == actors ...

  3. django 强制登录最佳实践

    参考: https://python-programming.courses/recipes/django-require-authentication-pages/ 即通过中间件来做AOP拦截.不用 ...

  4. 终于遇到app不兼容,你遇到了么?

    题记: 如果支付宝和QQ不兼容,要二选一,你会怎么选择? 首先了解一下背景: 笔者最近发现,微众银行的app升级到1.7.4, 而患有轻度强迫症的人是迫不及待的点了升级. 第一次,居然安装包安装不成功 ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. HSSFWorkBooK用法

    public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 HSSFShe ...

  7. ZOJ 3871 Convex Hull(计算几何、凸包)

    题意:给n个点,|x[i]|,|y[i]| <= 1e9.求在所有情况下的子集下(子集点数>=3),凸包的面积和. 这题主要有几个方面,一个是凸包的面积,可以直接用线段的有向面积和求得,这 ...

  8. [Sass]声明变量

    [Sass]声明变量 定义变量的语法: 在有些编程语言中(如,JavaScript)声明变量都是使用关键词"var"开头,但是在 Sass 不使用这个关键词,而是使用大家都喜欢的美 ...

  9. Linux学习记录

    ---恢复内容开始--- linux与unix的关系 linux是借鉴了unix设计思想,也称linux位类unix系统. Linux常用命令 1.命令基本格式 命令[选项][参数] 注意:个别命令不 ...

  10. Expression Blend 4 学习笔记

    Animation Storyboard(情节提要)在对象和时间线面板中建立和命名,定位到对象(object),通过拖动play head(播放头,时间线中垂直的黄色指示线)定位到特定的时间点,点击“ ...