2009-11-11 61 views
4

我有2個fancyboxes,我試圖從所述第一打開第二(或者通過按鈕或通過閉合第一)..如何關閉另一個Fancybox後關閉?

<div id="firstFancybox" style="display:none"> 
    <p>I'm the first Fancybox!</p> 
    <a id="fancyboxButton" href="#secondFancybox">Close first Fancybox</a> 
</div> 

<a id="hiddenLink" href="#firstFancybox"></a> 

<div id="secondFancybox" style="display:none"> 
    <p>I'm the second Fancybox!</p> 
</div> 

第一的fancybox正在對頁負載活化..

$(document).ready(function() { 
    $("a#hiddenLink").fancybox({ 'hideOnContentClick': false, 'frameWidth': 300, 'frameHeight': 300 }).trigger('click'); 
    $("a#fancyboxButton").fancybox(); 
    }); 

我希望能夠在第一個關閉時打開第二個fancybox。或者..點擊第一個按鈕打開第二個。

這是如何實現的?我沒有太多的運氣綁定到我害怕的事件上。

- 李

UPDATE:

使用callbackOnClose是讓我做簡單的東西,像警報( '你好'),但我還沒有成功地打開其他的fancybox呢。

$(document).ready(function() { 
     $("a#hiddenLink").fancybox({ 'hideOnContentClick': false, 'frameWidth': 300, 'frameHeight': 300, 
     callbackOnClose: function() { alert('hi'); } 
     }).trigger('click'); 
    }); 
+0

我從來沒有嘗試過,但好像你必須使用 「callbackOnClose」 事件觸發另一個打開。 – 2009-11-11 15:40:59

+0

好的頭像...隨機巧合?還是應該受寵若驚? ;-) – scunliffe 2009-11-11 15:41:25

+0

scunliffe,發現頭像年齡前,喜歡它。不知道我是否偷走了你或不害怕。如果你喜歡,可以有點受寵若驚。 ;-) – 2009-11-11 15:45:18

回答

6

好吧,我終於得到它的工作(我第一次遇到fancybox)。看起來callbackOnClose在結束時被調用,而不是在結束後。因此,第二個fancybox不能彈出,直到第一個完全關閉。

這個把戲?通過使用定時器延遲第二個的打開。這絕不是一個完美的答案,如果計時器設置太短,行爲可能會很奇怪,如果設置得太長,可能會不理想。 100ms適用於我。這是代碼。

腳本:

$(document).ready(function() { 
    $("a#hiddenLink").fancybox({ 'hideOnContentClick': false, 'frameWidth': 300, 'frameHeight': 300, 
     callbackOnClose: function() { window.setTimeout('open2()',100); } 
    }).trigger('click'); 
}); 
function open2(){ 
    $("a#fancyboxButton").fancybox().trigger('click'); 
} 

HTML:

<div id="firstFancybox" style="display:none"> 
    <p>I'm the first Fancybox!</p> 
    <a href="#" onclick="open2();">Close first Fancybox</a> 
</div> 
<a id="hiddenLink" href="#firstFancybox"><!--for first fancy box--></a> 
<a id="fancyboxButton" href="#secondFancybox"><!--for second fancy box--></a> 
+0

謝謝o.k.w.這似乎只是伎倆。李 – 2009-11-12 09:17:22

+0

@李,歡迎您:) – 2009-11-12 10:29:49

+0

嗯。這很奇怪,第二個fancybox沒有顯示覆蓋。你有同樣的問題嗎? o.k.w? – 2009-11-12 10:49:23

2

這是的fancybox 1.3+。爲了最有效地使用@ o.k.w提​​出的超時技巧,我們需要知道fancyBox的fadeout會花費多少時間。使用新的onClosed函數,我們可以使用currentOpts參數。

$("a[rel='fancy1']").fancybox({ 
    onClosed: function(currentArray, currentIndex, currentOpts){ 
     setTimeout(function(){$("a[rel='fancy2']").click();},currentOpts.speedOut); 
    } 
}); 

這樣你就不會有@ o.k.w指出的覆蓋問題。

0

這裏是我發現作爲一種解決方法,

的fancybox版本:2

$("#first_fancybox_link").fancybox({   
    afterClose:function(){ 
     $("#second_fancybox_link").fancybox({ 
      helpers: { 
       overlay : null 
      }, 
      afterShow:function(){ 
       $.fancybox.helpers.overlay.open({parent: $('body')}); 
      } 
     }).trigger('click'); 
    } 
}).trigger('click');