我已经在开发网站上实现了 fancybox2。
当我使用花式框(单击链接等)时,整个 html 会移到它后面 - 并移到顶部。我在另一个演示中运行良好,但是当我将相同的代码拖到这个项目时,它会跳到顶部。不仅有内联 div 的链接,还有简单的图片库。
有没有人经历过这个?
我已经在开发网站上实现了 fancybox2。
当我使用花式框(单击链接等)时,整个 html 会移到它后面 - 并移到顶部。我在另一个演示中运行良好,但是当我将相同的代码拖到这个项目时,它会跳到顶部。不仅有内联 div 的链接,还有简单的图片库。
有没有人经历过这个?
这实际上可以通过 Fancybox 2 中的助手来完成。
$('.image').fancybox({
helpers: {
overlay: {
locked: false
}
}
});
http://davekiss.com/prevent-fancybox-from-jumping-to-the-top-of-the-page/
Jordanj77 是正确的,但最简单的解决方案是转到样式表jquery.fancybox.css
并注释掉overflow: hidden !important;
部分中的行.fancybox-lock
我意识到这是一个老问题,但我认为我已经找到了一个很好的解决方案。问题是花哨的盒子会改变 body 的溢出值以隐藏浏览器滚动条。
正如 Dave Kiss 指出的那样,我们可以通过添加以下参数来阻止花哨的盒子这样做:
$('.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;
}
问题是 fancyBox 改变了 body 的溢出值以隐藏浏览器滚动条。我找不到切换此行为的选项。
您可以删除这部分 fancyBox 代码来阻止它:
if (obj.locked) {
this.el.addClass('fancybox-lock');
if (this.margin !== false) {
$('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth);
}
}
尽管解决这个问题的正确方法是通过fancybox提供的选项(参考这个答案),但CSS可以用来解决这个问题。无需编辑库的 css 文件,只需将其添加到应用程序的主样式表中:
html.fancybox-lock {
overflow: visible !important;
}
代码重置元素的原始溢出。问题是overflow: hidden;
隐藏元素上的滚动条<html>
,导致页面“跳”到顶部。为了保留滚动条的位置,我们用overflow: visible;
这也有帮助
.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');
}
});
也许这个答案已经晚了,但也许它在未来会有所帮助,如果在点击/关闭图像花式框后让您的网站滚动到顶部,您可以删除:
F.trigger('onReady');
或更好地使用:
/*F.trigger('onReady');*/
在 fancyBox 版本:2.1.5(2013 年 6 月 14 日星期五)中,部分代码位于第 897 行。
如果您使用的是 fancybox 默认函数,您实际上可以像这样编写代码:
$(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' });
},
});
我修复了它:
overflow: hidden !important;
在.fancybox-lock
体内jquery.fancybox.css
。滚动条不跳:)