有多个Fancybox时只关闭特定的FancyBox

时间:2013-03-07 09:58:31

标签: fancybox setinterval getjson fancybox-2

在给定页面中,我有多个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);
    });
});

2 个答案:

答案 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();

如果还有其他更好的方法,请提供建议。