我使用的是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-wrap
div在.fancybox-overlay
内部或外部的事实取决于助手覆盖状态:
默认值为true
,类似于:
helpers: {
overlay : {
locked: true
}
}
因此.fancybox-wrap
div将内部.fancybox-overlay
div。
另一方面,如果在自定义脚本中将值设置为false
,则.fancybox-wrap
div将是OUTSIDE.fancybox-overlay
div。
注意在第二种情况下(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:true和autoCenter:false 最后,当打开页面下方带有ajax内容的FancyBox时,FancyBox似乎不会重置CSStop值,而且我无法在回调中使用jQuery进行覆盖,所以我决定在FancyBox CSS:中强制执行此操作 这将打开所有的FancyBoxes,第一个和后续的FancyBoxes,在页面下方的任何点,从视口顶部20px。.fancybox-opened {z-index: 8030; top: 20px !important;}