在给定页面中,我有多个Fancybox项目实例,这些项目会在点击链接时显示视频。
除此之外,我还有一个每5秒运行一次的函数来从URL获取数据,并根据返回值显示另一个fancybox。
问题是,由于setInterval函数总是运行,即使播放实际视频,它也会关闭该视频,因为我使用$ .fancybox.close()。
我想要的只是关闭myModal识别的fanybox。
这是我使用的jQuery。
$(document).ready(function() {
function myplugin() {
$.getJSON("get-status.php", function (data) {
$.each(data, function (key, status) {
if(status > 0) {
$("#myModal").fancybox().click();
}else{
$.fancybox.close(); // Works. But closes other open Fancybox if any
//$("#myModal").fancybox().close(); // Does not work
}
});
});
};
$(function() {
setInterval(function() { myplugin() }, 5000);
});
});
答案 0 :(得分:1)
好吧,我并不完全确定我理解你的问题,但是因为要知道#myModal
目前是否在fancybox中打开(在fancybox函数本身之外)并不是很容易,我会创建一个将在fancybox回调中启用的标记 或 开关 IF #myModal
是当前打开的元素。
然后,从myplugin()
我将验证 开关 是true
(#myModal
是当前元素),如果所以,关闭fancybox。
脚本看起来像这样(未经测试,因为我真的不知道myplugin()
做了什么):
// declare a switch to set if #myModal is open in fancybox
var myModal = false;
$(document).ready(function () {
function myplugin() {
$.getJSON("get-status.php", function (data) {
$.each(data, function (key, status) {
if (status > 0) {
$("#myModal").fancybox({
// use a callback to set the switch = true
afterShow: function () {
$(this.element).attr("id") == "myModal" ? myModal = true : myModal = false;
}
}).click();
} else {
// close fancybox if myModal == true
if (myModal) {
$.fancybox().close();
myModal = false; // reset switch ?
}
}
});
});
};
// you don't need $(function(){ }); since you have declaread .ready() above
setInterval(function () {
myplugin()
}, 5000);
});
答案 1 :(得分:0)
我在下面尝试过这个并且它有效。
$("#myModal").parents("div .fancybox-skin").hide();
如果还有其他更好的方法,请提供建议。