暂停除已激活的玩家之外的所有其他玩家。 <audio> 元素的 jQuery 音频插件
Posted
技术标签:
【中文标题】暂停除已激活的玩家之外的所有其他玩家。 <audio> 元素的 jQuery 音频插件【英文标题】:Pause all other players besides activated one. jQuery audio plugin for <audio> element 【发布时间】:2013-04-15 12:37:38 【问题描述】:我有这个插件,它对 html5 <audio>
元素应用不同的样式,并为不支持 .mp3 文件格式的浏览器提供 Flash 回退。我遇到的问题是,一旦你开始播放一首歌曲,然后在任何一首歌曲上点击播放,它们都会同时播放,这是不好的用户体验。
我试图弄清楚如何编辑插件以使其一次只播放一首歌曲,因此假设用户听了一首歌曲然后单击另一首歌曲播放,第一首歌曲应该暂停,依此类推。 我不完全确定,但我认为需要按照这些思路进行编辑:
playPause: function()
if (this.playing) this.pause();
else this.play();
,
但是,插件中有很多地方似乎处理播放和暂停歌曲,所以我不确定这是否完全正确。我对 jQuery 还是很陌生,无法完全弄清楚这个大型音频库是如何工作的,我一直在阅读代码注释,但仍然无法弄清楚这一点。 插件的完整代码在这里:http://freshbeer.lv/mg/js/audio.min.js 官方插件网站:http://kolber.github.io/audiojs/ 您可以访问我的演示页面查看问题,只需在多个播放器上单击播放,您会看到它们都在同时播放:http://freshbeer.lv/mg/index.html
【问题讨论】:
插件是否使用了 html5 元素?如果是这样,您可以在 javascript 中执行类似 audioTrack.pause() 的操作,或者省略元素的 autoplay 属性。 @TwistedInferno 确实如此,不确定您所说的自动播放属性是什么意思,因为目前它没有在任何地方使用。问题是,一旦用户播放一首歌曲,然后点击播放其他播放器,他们都同时播放,所以几首歌曲。你能扩展audioTrack.pause()吗?如何使用它来暂停以前的播放器,但让当前播放器仍在播放歌曲? 【参考方案1】:使用 addEventListener 和 play 事件。这会暂停所有播放器,但按下播放按钮的播放器除外。
audiojs.events.ready(function ()
var as = audiojs.createAll();
$('audio').each(function ()
var myAudio = this;
this.addEventListener('play', function ()
$('audio').each(function ()
if (!(this === myAudio))
this.pause();
);
);
);
);
【讨论】:
什么?你从我的页面得到这个音频元素吗?我有一个是这样的(我很困惑,你在什么浏览器中测试它?):api.soundcloud.com/tracks/75868018/…> 你说它使用 html5 元素,这就是 html5 音频元素的样子。由于未经授权的访问错误,我无法访问您的页面。 (还是感谢您的尝试?) 无法访问自动播放属性试试js 对不起,我不是故意的,我只是感到困惑,因为你的音频元素看起来很不一样,但是是的,我的没有自动支付属性,我认为第二种方法“audioTrack.暂停();”只会暂停所有播放器,甚至是用户点击播放的播放器,对吗?我很感激你的时间,谢谢。另外你怎么不能访问演示网站?我累了,它似乎工作,你得到什么错误? 对不起,我想我误解了你的问题!为每个音频元素添加一个 id,然后将一个播放事件处理程序附加到每个暂停所有其他播放器的元素。以上是关于暂停除已激活的玩家之外的所有其他玩家。 <audio> 元素的 jQuery 音频插件的主要内容,如果未能解决你的问题,请参考以下文章
[知了堂学习笔记]_用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)