【发布时间】:2011-09-29 05:09:04
【问题描述】:
我的问题是,例如 overflow:hidden; 删除的浏览器窗口垂直滚动条会在稍后重新出现时使页面跳转。我使用 jQuery 从访问者中删除滚动选项,同时脚本正在运行并将页面滚动到特定点,然后让它再次出现:
www.nebulafilm.dk/index.html?content
我可以为滚动条创建一个占位符,当它不存在时,它不会跳转回来?
或者是否可以“禁用”它并使其“变灰”?
我无法通过搜索找到任何解决方案。我在这里找到了类似的东西:stackoverflow.com 滚动条总是在那里。但不同之处在于滚动条必须保持禁用状态,即使页面比窗口长。它只能通过我控制的另一个脚本再次“打开”。
这有可能吗?
谢谢。
更新:
是时候更新状态了。
我在使用body 标签上设置的星云背景图片时遇到了一些问题。
当 jQuery 脚本(来自 cwolves 的回答)将填充添加到 html 标记并因此应该将页面上的所有元素推到左侧时,背景图像的行为仍然不正确。
好吧,我发现body 元素的反应不像任何div 元素。它不仅仅是html 标记内的“块”,就像任何其他块元素一样。它有自己的行为,显然不能以同样的方式被欺骗。因此,背景图像在body 上时无法触摸。
但我花了一些时间才意识到......
这个问题的最终解决方案非常简单,以至于当我发现时,我几乎要流泪了,想到了无休止的(我可能会夸大其词)几个小时来调查body。
我只是将所有内容都包装在 <div id="body"> 中,然后将其作为背景图像。突然间,一切都到位了。
发件人:
<body>
...
</body>
和
body {background-image: url(...);}
收件人:
<body>
<div id="body">
...
</div>
</body>
还有:
#body {background-image: url(...);}
对body 更明智一点。
不再“跳跃”。好吃。
效果现在已完全运行,您几乎不会注意到滚动条的变化,并且每个细节都适合。 Cwolve 的脚本是完美的,并且会进行精确的计算:
function getScrollBarWidth(){
var div = $('<div><div>' + new Array(100).join('content<br />') + '</div></div>'),
div2 = div.find('div'),
body = $(document.body);
div.css({ overflow : 'hidden', width: 100, height: 100, position : 'absolute', left : -1000, top : -1000 });
body.append(div);
var width1 = div2.width();
div.css({ overflow : 'auto' });
var width2 = div2.width();
div.remove();
return width1 - width2;
}
getScrollBarWidth() 将精确地包含滚动条的宽度,无论浏览器如何,我都可以使用它来添加和删除我想要的填充:
var sWidth = getScrollBarWidth();
$("body").css({'overflow': 'hidden'});
$("html").css({'padding-right': sWidth});
$('html, body').delay(1000).animate({
scrollTop: $(hash).offset().top - 170
}, 2000, 'swing', function(){
$("body").css({'overflow': 'auto'});
$("html").css({'padding-right': 0});
});
非常感谢。这是一个不错的。
【问题讨论】:
标签: jquery scrollbar placeholder