2011-04-10 158 views
1

请看看beta.gulfdine.com。你会看到一个“登录”链接。点击它启动一个jQuery覆盖。jQuery覆盖:关闭当前覆盖并打开另一个?

现在点击“为什么加入?”。这将启动另一个叠加层,其中有一个“立即注册”链接。点击它打开前一个覆盖。

现在是这个问题。你会注意到两个叠加层都有'揭露'选项,这个选项显示了屏幕的其余部分变暗。当两者都独立打开时,这可以正常工作。但是,当我从“为什么加入?”启动注册覆盖图时,未显示曝光效果。同时在叠加层之外单击不起作用。

下面是代码:

/*Overlays*/ 
var whyJoinOverlay = $("a.whyJoin[rel]").overlay({ expose: '#000', top: 'center', api: true }); 
var loginLinks = $("a.loginLinks[rel]").overlay({ expose: '#000', top: 'center', api: true }); 

$("a.callToAction").click(function (e) { 
    e.preventDefault(); 
    whyJoinOverlay.close(); 
    loginLinks.load(); 
}); 

这是因为什么我做错了,或者这是jQuery的覆盖的错误?

回答

1

吉米似乎一直在错误原因的正确轨道上。

事实证明,存在需要,为了使这项工作要修改一个内置的价值,正如我在jQuery的工具论坛发现:http://flowplayer.org/tools/forum/40/41903

修改后的代码现在看起来是这样的:

var whyJoinOverlay = $("a.whyJoin[rel]").overlay({ 
    top: 'center', 
    api: true, 
    mask: { 
     color: "#000", 
     loadSpeed: 0, 
     closeSpeed:0,//this is REQUIRED for the next overlay to work 
     opacity: 0.9 
     } 
}); 

var loginLinks = $("a.loginLinks[rel]").overlay({ expose: '#000', top: 'center', api: true }); 
/* No longer any need for the $("a.callToAction").click() function */ 
1

问题在于,fadeOut动画未被允许在加载新模式之前完成。我在文档中搜索了一下,找不到一种方法将回调传递给close()函数,但是您需要找到一些方法来实现这一点。出现这种情况时,你的代码将是这个样子:

$("a.callToAction").click(function (e) { 
    e.preventDefault(); 
    whyJoinOverlay.close(function() 
    { 
     loginLinks.load(); 
    }); 
}); 

这确保了close功能完成完成load功能开始之前,换句话说,确保行动是同步的。就像我之前所说的那样,您可能需要在回调传递到close函数时有所创意:它可能需要JSON名称说明符,或者可能需要提前定义。如果你找不到这样做的方法,那么你可以添加或者找出替换方法,这是库的限制。

+0

嗨吉米,你在正确的轨道上 - 我发现在jQuery论坛的答案:http://flowplayer.org/tools/forum/40/41903 – 2011-04-10 02:52:36

+0

这看起来像更新的网址,以同一论坛问题:http://jquerytools.org/forum/tools/40/41903 – 2012-04-13 15:12:07