我创建了一个网站,其中包含我拍摄过的人的图像缩略图。当访问者点击其中一个缩略图时,使用jQuery显示完整图像,并播放音频介绍。我对每个缩略图/图像组合都有不同的音频介绍 - 目前有15个,每天都会添加更多。
我想确保如果访问者在上一个音频文件完成之前点击另一个缩略图,则停止/暂停前一个音频文件以允许播放新的音频文件 - 从而确保两个或多个曲目执行不能同时玩。
我目前正在使用以下代码片段(包含在匿名函数中),在单击相应的缩略图时单独播放每个音频文件 - 因此每个音频文件都会复制此片段,但不知道如何确保他们不会互相比赛。
$(".bridget-strevens").click(function(){
var audio = $('#bridget-strevens-intro')[0];
if (audio.paused){
audio.play();
} else {
audio.pause();
}
});
你能给我的任何帮助都会非常感激,因为我刚刚开始学习jQuery,并且没有足够的知识来提出可行的解决方案。
提前感谢您的帮助!
答案 0 :(得分:2)
为所有音频元素添加.audio
类,并在点击音频时循环浏览所有音频元素。
$(".bridget-strevens").click(function () {
$('.audio').each(function (index, value) {
if (!value.paused) {
value.pause();
}
});
var audio = $('#bridget-strevens-intro')[0];
if (audio.paused) {
audio.play();
} else {
audio.pause();
}
});
如果这对您来说太沉重,那么只需将音频元素添加到全局变量中,例如:
var currentAudio;
然后,当点击新音频时,只需暂停该音频,播放新音频并使用当前正在播放的新元素更新currentAudio
变量。
var currentAudio = null;
$(".bridget-strevens").click(function () {
if(currentAudio != null && !currentAudio.paused){
currentAudio.pause();
}
var audio = $('#bridget-strevens-intro')[0];
if (audio.paused) {
audio.play();
currentAudio = audio;
} else {
audio.pause();
}
});
<强>更新强>
感谢您的快速回复! Grimbode,我已经尝试过你了 建议,这似乎有效。但是有能力停止 并重置而不是暂停 - 所以如果他们点击1然后[2] 在1完成之前,再次点击1,1将从中开始 重新开始,而不是暂停的时间点?和 有没有办法检查状态&#39;全球&#39;,然后添加代码 每个单独的音频文件 - 只是为了保持代码量和 重复下来?再次感谢!! -
是。 Play audio and restart it onclick详细说明了如何执行此操作。最终结果看起来像这样:
var currentAudio = null;
$(".bridget-strevens").click(function () {
if(currentAudio != null && !currentAudio.paused && currentAudio != this){
currentAudio.pause();
//Here we reset the audio and put it back to 0.
currentAudio.currentTime = 0;
}
var audio = $('#bridget-strevens-intro')[0];
if (audio.paused) {
audio.play();
currentAudio = audio;
} else {
audio.pause();
}
});
您无法真正优化代码。您将在每个音频元素上应用click事件。您将不得不记住当前正在播放的音频元素,这样您就不必遍历所有音频文件。
如果您真的想要进一步发展,可以创建一个库来处理所有事情。这是一个例子:
(function(){
var _ = function(o){
if(!(this instanceof _)){
return new _(o);
}
if(typeof o === 'undefined'){
o = {};
}
//here you set attributes
this.targets = o.targets || {};
this.current = o.current || null;
};
//create fn shortcut
_.fn = _.prototype = {
init: function(){}
}
//Here you create your methods
_.fn.load = function(){
//here you load all the files in your this.targets.. meaning you load the source
//OR you add the click events on them.
//returning this for chainability
return this
};
//exporting
window._ = _;
})();
//here is how you use it
_({
targets: $('.audio')
}).load();