2009-11-11 105 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');