2013-03-07 52 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