HTML5 - 使用JavaScript控制[audio]音频的播放
1,通过JavaScript控制页面上的播放器
比如把页面上添加一个<audio>用来播放背景音乐(由于controls属性未设置,我们是看不见播放界面的)
XML/HTML Code复制内容到剪贴板
- <audio id="bgMusic">
- <sourcesource = src="music.mp3" type="audio/mp3">
- <sourcesource = src="music.ogg" type="audio/ogg">
- </audio>
通过pause()和play()方法可以使音乐暂停和继续播放(结合currentTime属性可以实现停止和重新播放)
JavaScript Code复制内容到剪贴板
- var audio = document.getElementById("bgMusic");
- //播放(继续播放)
- audio.play();
- //暂停
- audio.pause();
- //停止
- audio.pause();
- audio.currentTime = 0;
- //重新播放
- audio.currentTime = 0;
- audio.play();
2,也可以动态的创建<audio>元素
JavaScript Code复制内容到剪贴板
- //方式1
- var audio = document.createElement("audio");
- audio.src = "music.mp3";
- audio.play();
- //方式2
- var audio = new Audio("music.mp3");
- audio.play();
通过canPlayType()方法可以判断浏览器支持的编码方式,从而设置对应的音频文件
JavaScript Code复制内容到剪贴板
- if (audio.canPlayType("audio/mp3")) {
- audio.src = "music.mp3";
- }else if(audio.canPlayType("audio/ogg")) {
- audio.src = "music.ogg";
- }
XML/HTML Code复制内容到剪贴板
- <script>
- var audio;
- window.onload = function() {
- initAudio();
- }
- var initAudio = function() {
- //audio = document.createElement("audio")
- //audio.src='Never Say Good Bye.ogg'
- audio = document.getElementById('audio');
- }
- function getCurrentTime(id) {
- alert(parseInt(audio.currentTime) + ':秒');
- }
- function playOrPaused(id, obj) {
- if(audio.paused) {
- audio.play();
- obj.innerHTML = '暂停';
- return;
- }
- audio.pause();
- obj.innerHTML = '播放';
- }
- function hideOrShowControls(id, obj) {
- if(audio.controls) {
- audio.removeAttribute('controls');
- obj.innerHTML = '显示控制框'
- return;
- }
- audio.controls = 'controls';
- obj.innerHTML = '隐藏控制框'
- return;
- }
- function vol(id, type, obj) {
- if(type == 'up') {
- var volume = audio.volume + 0.1;
- if(volume >= 1) {
- volume = 1;
- }
- audio.volume = volume;
- } else if(type == 'down') {
- var volume = audio.volume - 0.1;
- if(volume <= 0) {
- volume = 0;
- }
- audio.volume = volume;
- }
- document.getElementById('nowVol').innerHTML = returnFloat1(audio.volume);
- }
- function muted(id, obj) {
- if(audio.muted) {
- audio.muted = false;
- obj.innerHTML = '开启静音';
- } else {
- audio.muted = true;
- obj.innerHTML = '关闭静音';
- }
- }
- //保留一位小数点
- function returnFloat1(value) {
- value = Math.round(parseFloat(value) * 10) / 10;
- if(value.toString().indexOf(".") < 0) {
- valuevalue = value.toString() + ".0";
- }
- return value;
- }
- </script>
- 调用方式如下:
- <a href="javascript:void(0);" onclick="getCurrentTime('firefox');">获取播放时间</a>
- <a href="javascript:void(0);" onclick="playOrPaused('firefox',this);">播放</a>
- <a href="javascript:void(0);" onclick="hideOrShowControls('firefox',this);">隐藏控制框</a>
- <a href="javascript:void(0);" onclick="muted('firefox',this);">开启静音</a>
- <input type="button" value="+" id="upVol" onclick="vol('firefox' , 'up' , this )" />音量<input type="button" value="-" onclick="vol('firefox' , 'down' ,this )" />
- <audio src="/images/audio/Never Say Good Bye.ogg" id="audio" controls="controls"></audio>
- 当前音量:<span id="nowVol"> - </span>
用html5的video方式播放视频时,在ipad上是默认原来大小的,而在iphone上是默认全屏播放的。
HTML里video必须加上webkit-playsinline属性
XML/HTML Code复制内容到剪贴板
- <video id="video" controls="controls" webkit-playsinline="true">
- <source src="test.mp4" type="video/mp4" />
- Your browser does not support HTML5 video.
- </video>
发现IOS加这个也不生效,改成这样:
XML/HTML Code复制内容到剪贴板
- <video controls="controls" width="100%" height="100%" id="myvideo" playsinline webkit-playsinline x-webkit-airplay x5-playsinline preload="auto">
开发时遇见一个问题,宣传页面的视频在iPhone 6s plus 上无法播放,但其它几台正常,测试之下发现:ios10版本下,video标签 preload = 'none' 属性会让视频无法播放,改为 preload = 'auto' 即可;
IOS的视频文件无法在ajax取得后重新赋值给source,所以将dom下的删除,再次写入一遍即可:
JavaScript Code复制内容到剪贴板
- playVideo(source, ifAutoPlay = true) {
- //播放视频,资源链接,是否自动播放,默认为是
- this.playerShow = true;
- this.$set(this,'playerSource',source);//定义路径
- // this.playerSource = source;
- let dom = document.getElementById('myvideo');
- $(dom).find("source").remove();
- $(dom).append("<source src='"+source+"'></source>");
- dom.load(); //重新加载
- if(ifAutoPlay) {
- dom.play(); // 开始播放
- }
- },