1

在给定页面中,我有多个 Fancybox 项目实例,当单击链接时会显示视频。

除此之外,我还有一个函数每 5 秒运行一次,以从 URL 获取数据并根据返回值显示另一个幻想框。

问题是,由于 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);
    });
});
4

2 回答 2

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);
});
于 2013-03-08T06:44:53.873 回答
0

我在下面尝试了这个,它奏效了。

$("#myModal").parents("div .fancybox-skin").hide();

如果有其他更好的方法可以做到这一点,请提出建议。

于 2013-03-08T06:43:30.157 回答