我已在开发网站上实现了fancybox2。
当我使用fancybox(点击链接等)时,整个html都会在其后面移动并到达顶部。我在另一个演示中将其正常工作,但是当我将相同的代码拖动到此项目时,它会跳到顶部。不仅对于连接到内联div的链接,而且对于简单的图片库也是如此。
有人遇到过这种情况吗?
我已在开发网站上实现了fancybox2。
当我使用fancybox(点击链接等)时,整个html都会在其后面移动并到达顶部。我在另一个演示中将其正常工作,但是当我将相同的代码拖动到此项目时,它会跳到顶部。不仅对于连接到内联div的链接,而且对于简单的图片库也是如此。
有人遇到过这种情况吗?
$('.image').fancybox({
helpers: {
overlay: {
locked: false
}
}
});
http://davekiss.com/prevent-fancybox-from-jumping-to-the-top-of-the-page/
Jordanj77说得没错,但最简单的解决方法是直接打开样式表 jquery.fancybox.css
,并在 .fancybox-lock
部分中注释掉说 overflow: hidden !important;
的那一行。
我知道这是一个老问题,但我认为我已经找到了一个好的解决方案。问题在于fancybox更改了body的溢出值以隐藏浏览器滚动条。
正如Dave Kiss所指出的那样,我们可以通过添加以下参数来阻止fancybox这样做:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
}
});
但是,现在我们可以在查看精美的弹出窗口的同时滚动主页面。这比跳转到页面顶部要好,但这可能不是我们真正想要的。
我们可以通过添加以下参数来正确地防止滚动:
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
},
'beforeLoad': function(){
disable_scroll();
},
'afterClose': function(){
enable_scroll();
}
});
同时添加来自galambalaz的这些函数。请参见:如何暂时禁用滚动?
var keys = [37, 38, 39, 40];
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
function keydown(e) {
for (var i = keys.length; i--;) {
if (e.keyCode === keys[i]) {
preventDefault(e);
return;
}
}
}
function wheel(e) {
preventDefault(e);
}
function disable_scroll() {
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
document.onkeydown = keydown;
}
function enable_scroll() {
if (window.removeEventListener) {
window.removeEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
}
if (obj.locked) {
this.el.addClass('fancybox-lock');
if (this.margin !== false) {
$('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth);
}
}
.fancybox-lock {
overflow: inherit !important;
}
- sebastien尽管通过fancybox提供的选项是解决这个问题的正确方法(参考此答案), 但是CSS也可以用来解决这个问题。无需编辑库的css文件,只需将其添加到应用程序的主样式表中:
html.fancybox-lock {
overflow: visible !important;
}
该代码重置了元素的原始溢出。问题在于overflow: hidden;
会隐藏<html>
元素上的滚动条,导致页面“跳到”顶部。为了保留滚动条的位置,我们使用overflow: visible;
覆盖了溢出。
<body>
或/和 <html>
具有 height: 100%
。 - thexpand.fancybox-lock body {
overflow: visible !important;
}
$('.fancybox').fancybox({
helpers: {
overlay: {
locked: false
}
},
beforeShow:function(){
$('html').css('overflowX', 'visible');
$('body').css('overflowY', 'hidden');
},
afterClose:function(){
$('html').css('overflowX', 'hidden');
$('body').css('overflowY', 'visible');
}
});
$(document).ready(function() {
$(".fancybox").fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
}
});
});
你也可以尝试这种方法!
$.fancybox({
beforeShow: function () {
$("body").css({ 'overflow': 'hidden' });
},
afterClose: function () {
$("body").css({ 'overflow-y': 'visible' });
},
});
F.trigger('onReady');
或者更好的使用:
/*F.trigger('onReady');*/