在关闭上一个fancybox后,在页面上打开另一个Fancy box



我使用的是fancybox 2.1.5版本。当我打开fancybox时,我注意到.fancybox wrapdiv在.fancybox overlay分区内。如果我在同一页上打开另一个fancybox,.fancyboxoverlaydiv现在在.fancybbox wrap分区的外部和上方。

我对第一个和第二个fancybox的定义是相同的,如下所示:

$.fancybox({
    href        : '#my_div',
    autoSize    : true,
    fitToView   : false,
    padding     : 0,
    fixed       : true,
    autoCenter  : false,
    topRatio    : 0.5,
});

如果.fancybox包装div在.fancyboxoverlaydiv内,并且我滚动页面,当fancybox内容大于窗口时,只有fancybox滚动,背景内容保持静态

然而,当它在.fancybox覆盖之外时,当我滚动fancybox和它后面的内容时,会滚动。

如何防止页面向后滚动。

当你在这个问题中检查DEMO时,与fancybox网站上的演示相比,wrapdiv在overlaydiv之外。

首先,您参考的DEMO(我的演示)使用了fancybox v2.0.6;从那时起,情况发生了变化。

其次,.fancybox-wrapdiv在.fancybox-overlay内部或外部的事实取决于助手覆盖状态:

默认值为true,类似于:

helpers: {
    overlay : {
        locked: true
    }
}

因此.fancybox-wrapdiv将内部.fancybox-overlaydiv。

另一方面,如果在自定义脚本中将值设置为false,则.fancybox-wrapdiv将是OUTSIDE.fancybox-overlaydiv。

注意在第二种情况下(false),您将能够滚动fancybox后面的页面。

DEMO使用v2.1.5

在GitHub上,FancyBox的作者建议尝试FancyBox 3测试版,看看问题是否得到了解决。对我来说(在写这篇评论的时候),它还没有准备好进入黄金时段,所以我用以下方式解决了这个错误:

beforeShow : function() {
  // Move the wrap manually into overlay
  $(".fancybox-wrap").appendTo(".fancybox-overlay");
  // Add the missing classes to <html>
  $("html").addClass("fancybox-margin fancybox-lock");
},

我使用覆盖locked:trueautoCenter:false

最后,当打开页面下方带有ajax内容的FancyBox时,FancyBox似乎不会重置CSStop值,而且我无法在回调中使用jQuery进行覆盖,所以我决定在FancyBox CSS:中强制执行此操作

.fancybox-opened {z-index: 8030; top: 20px !important;}

这将打开所有的FancyBoxes,第一个和后续的FancyBoxes,在页面下方的任何点,从视口顶部20px。

最新更新