2010-01-24 20 views
9

我需要知道fancybox已經開放,允許或拒絕另一個函數啓動。如何確定fancybox何時開放?

內建函數fancybox像'onStart'或'onClosed'不起作用。

我談論版本1.3.0 RC2

回答

10

您使用的版本顯然與文檔不匹配;我查看了源文件,看到了這些選項的名稱與在線文檔不同。我只是測試用1.3RC2如下:

$(document).ready(function() { 

    function myStartFunction() { alert('fancy box opened'); } 

    $("a#inline").fancybox({ 
     'onStart': myStartFunction 
    }); 
}); 

你要找的選項是「在onStart」 - 在myStartFunction警報響起每次我打開一個盒子時間。我不確定他們何時更改了該選項,但可以查看底部使用的任何版本的來源,並查看應該調用哪個選項。

編輯

我只是雙重檢查上V1.2.5 - 我使用的版本 - 和回調確實命名不同。 callbackOnStart可與1.25,但正如我所說的,不是1.3

+0

哈哈,如果你可以在http://fancybox.net/dev/130/的資源中看到,他們會從第二個參數中調用一個'onStart'等。這樣它不起作用。非常感謝Erik ^^ –

3

我不知道你所說的內置函數的意思。 Fancybox具有調用用戶定義函數的回調函數(您必須自己創建函數)。 像:

function myClose() 
{ 
    alert('close'); 
} 

function myStart() 
{ 
    alert('start'); 
} 

$("a#single_image").fancybox({ 
    'callbackOnClose': myClose, 
    'callbackOnStart': myStart 
// etc, etc.. 
}); 

另外,您可以檢查fancy_content div來看看它是否有內部的任何物件。 (如果有,則fancybox打開)。

if ($('#fancy_content:empty').length > 0) 
{ 
    // Is empty 
} 
2

這似乎爲我工作:

 isLoaded : function(){ 
      return $('#fancybox-content').html()!=''; 
     } 
8

嘗試使用方法

beforeLoad, // Before loading 
afterLoad, // After loading 
beforeShow, // Before changing in current item 
afterShow, // After opening 

此代碼做工精細

$(".fancybox").fancybox({beforeShow:function(){alert('blah');}}); 
+0

OP說'我正在談論版本1.3.0 RC2' – JFK

4

如果您正在尋找一種方法來確定fancybox是否打開(而不是打開時觸發的事件然後從fancybox v2開始,你可以使用$.fancybox.isOpen屬性。它沒有記錄(至少我沒有找到任何參考),但它的工作原理。

實施例:

if(!$.fancybox.isOpen) { 
    $.fancybox.open({ 
     href: '#newsletter-campaign-popup', 
     height: 385, 
     width: 510, 
     type: 'inline' 
    }); 
} 

上面的例子防止打開第二的fancybox如果一個已經打開。

1

如果您有多個div的,你正在使用的fancybox,下面的代碼可能會更好和更普遍的解決方案:

if ($('.fancybox-opened').length == 0) { 
    //there is no fancybox opened at all 
} 

還要注意的fancybox內容可能不總是空的,即使的fancybox關閉。

12

$.fancybox.isOpen(布爾)表示fancybox是否打開。

+0

更好的和漂亮的解決方案,應該回答 –

+1

是的,但我恐怕它只適用於Fancybox 2 – tillsanders