2013-03-07 53 views
1

在给定的页面中,我有多个Fancybox项目的实例,当点击链接时会显示一个视频。只有在有多个Fancybox时才关闭特定的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

有人请帮助..惊喜地看到关于这一主题没有任何帮助。 – Purus 2013-03-07 14:09:20

+0

惊讶?也许是因为你的问题不是很清楚。 – JFK 2013-03-07 22:09:54

+0

我很乐意提供这方面的更多信息。我提供了我用过的代码。请让我知道哪一个不清楚。 – Purus 2013-03-08 03:59:21

回答

1

好了,我不能完全肯定我理解你的问题,但因为它不是很容易知道,如果#myModal中的fancybox当前打开的(外的fancybox本身的功能),我想创建一个标志开关将从一个fancybox回调内启用如果#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); 
}); 
+0

你对我的问题的理解是否正确。谢谢你。 – Purus 2013-03-08 06:50:54

0

我试过下面的一个,它的工作。

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

请咨询,如果还有其他更好的方法来做到这一点。

+0

我不会说'hide'和close – JFK 2013-03-08 06:45:51

+1

是一样的。但是在性能方面会有什么不同吗?或者我会面对任何问题?这看起来像一个更简单的方法。但是,再次,我会接受你的答案,因为它更全面和更好。 – Purus 2013-03-08 06:49:28