我的问题是浏览器窗口垂直滚动条被删除,例如overflow:hidden;
稍后再次出现时会使页面跳转。我使用 jQuery 从访问者中删除滚动选项,同时运行脚本并将页面滚动到特定点,然后使其再次重新出现。
当滚动条不存在时,我可以为滚动条创建一个占位符,这样它就不会出现吗jump back?
或者是否可以“禁用”它并将其“灰显”?
我通过搜索找不到任何解决方案。我在这里发现了类似的东西:stackoverflow.com https://stackoverflow.com/questions/838545/div-vertical-scrollbar-show滚动条始终存在的地方。但不同之处在于,即使页面比窗口长,滚动条也必须保持禁用状态。它只能通过我控制的另一个脚本再次“打开”。
这有可能吗?
Thanks.
Update:
是时候更新状态了。
我对星云背景图像有一些问题,该图像设置在body
tag.
当 jQuery 脚本(来自 cwolves 答案)将填充添加到html
标签,因此应该将页面上的所有元素推到左侧,背景图像仍然表现不正确。
嗯,我发现body
元素的反应不一样div
元素。它不仅仅是内部的一个“块”html
像任何其他块元素一样的标签。它有自己的行为,显然不能用同样的方式来欺骗。因此,背景图像在打开时无法触摸body
.
但我花了一些时间才意识到......
最终的解决方案是如此简单,以至于当我发现这一点时,我几乎热泪盈眶,想到无尽的(我可能有点夸张)时间的调查body
.
我只是把所有东西都包裹在一个<div id="body">
并给了这个背景图像。突然间,一切都井然有序。
From:
<body>
...
</body>
And
body {background-image: url(...);}
To:
<body>
<div id="body">
...
</div>
</body>
And:
#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;
}
The 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});
});
非常感谢。这是一个很好的。