gpt4 book ai didi

javascript - 如何从同一个插件获得多个播放器实例

转载 作者:行者123 更新时间:2023-11-28 05:56:26 25 4
gpt4 key购买 nike

我正在尝试创建一个音乐播放器插件,其中同一页面内将有多个实例。所有实例的音频对象都是相同的。

这是我的代码: DEMO

HTML:

<div class="player" data-track="https://rjmediamusic.com/media/mp3/Masih-Arash-AP-Bia-Bazam.mp3">
<div class="playBtn"></div>
</div>

<div class="player" data-track="https://rjmediamusic.com/media/mp3/Masih-Arash-AP-Hanooz-Hamoonam.mp3">
<div class="playBtn"></div>
</div>

JS:

audio = new Audio();
audio.src= $('.player').data("track");
$(".player").click(function(){
$(".playBtn").toggleClass('active');
if($(".playBtn").hasClass('active')){
audio.play();
}else{
audio.pause();
}
})

当选择播放一首歌曲时,不应播放其他歌曲。是否有任何解决方案可以使其工作,以便每个实例都有自己的功能,但所有实例共享相同的音频对象?

最佳答案

我在这个 jsFiddle 中做了你的例子:https://jsfiddle.net/mgaskill/zLgpq9dy/

困难在于您使用具有相同 CSS 类的所有实例,但没有 ID。如果你小心的话,这是可行的,这就是我所做的。神奇之处在于事件处理程序中的 jQuery $(this) 对象。

找到正确的播放按钮

var playButton = $(this).find(".playBtn");

检查播放按钮的类别

if (playButton.hasClass('active')) {

重新分配音频源

  audio.src= $(this).data("track");

这些允许多个玩家重复使用源代码。

这是更新后的 JavaScript:

audio = new Audio();

$(".player").click(function(){
var playButton = $(this).find(".playBtn");

if (!playButton.hasClass('current')) {
$(".playBtn").removeClass("active");
$(".playBtn").removeClass("current");
playButton.addClass("current");
audio.src= $(this).data("track");
}

playButton.toggleClass('active');

if (playButton.hasClass('active')) {
audio.play();
} else {
audio.pause();
}
});

这些更改将玩家是否正在主动播放与是否当前玩家区分开来,从而允许音频从暂停状态恢复。从一名玩家切换到另一名玩家时,所有其他玩家都将设置为不活动,从而可以正确表示每个玩家的视觉状态。

现在,当播放器切换时,音频源会分配给当前播放器。这将阻止任何先前的玩家继续玩游戏,并允许新玩家在激活时开始。

关于javascript - 如何从同一个插件获得多个播放器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com