我需要能够检测浏览器窗口上是否有滚动条(垂直和水平).我一直在使用这段代码,但它在Firefox 5中无法正常运行.
- JFL.GetScrollbarState = function () {
- var myWidth = 0;
- var myHeight = 0;
- if (document.documentElement && document.documentElement.clientWidth) {
- myWidth = document.documentElement.clientWidth;
- myHeight = document.documentElement.clientHeight;
- } else {
- myWidth = document.body.clientWidth;
- myHeight = document.body.clientHeight;
- }
- return ({
- vScrollbar: document.body.scrollHeight > myHeight,hScrollbar: document.body.scrollWidth > myWidth
- });
- }
有没有更好的方法来实现跨浏览器的工作.我的浏览器目标是Firefox 4-5,Chrome,Safari 4,Opera 10.
如果你对我为什么需要知道是否有滚动条感兴趣,那是因为我有一些旋转的CSS3过渡(由于它们旋转的性质)可能会暂时超出当前文档大小的边缘(从而制作文档暂时更大).如果最初没有滚动条,则CSS3转换可能会导致滚动条在转换期间显示,然后在转换完成时消失,从而导致滚动条闪烁.如果我知道没有滚动条存在,我可以暂时添加一个类,将overflow-x或overflow-y设置为hidden,从而防止CSS3过渡期间滚动条闪烁.如果滚动条已经存在,我不需要做任何事情,因为它们可能会移动一点,但它们不会在转换期间打开/关闭.
如果一个人实际上不仅可以告诉滚动条通常是否需要,而且它们是否实际存在,那么奖励积分.
解决方法
使用David在某些浏览器(Safari和IE)中提出的滚动版本遇到闪烁问题后,我已经确定了这个没有闪烁问题的代码:
- function getScrollBarState() {
- var result = {vScrollbar: true,hScrollbar: true};
- try {
- var root = document.compatMode=='BackCompat'? document.body : document.documentElement;
- result.vScrollbar = root.scrollHeight > root.clientHeight;
- result.hScrollbar = root.scrollWidth > root.clientWidth;
- } catch(e) {}
- return(result);
- }
它是我正在使用的衍生物,并且在fanfavorite发布的帖子中引用了一般技术.它似乎适用于我在IE6中尝试的每个浏览器.出于我的目的,我希望任何失败的回归都有一个滚动条,所以我用这种方式编写了失败条件.
注意:此代码不会检测是否已使用CSS强制打开或关闭滚动条.此代码检测是否调用自动滚动条.如果您的页面可能具有控制滚动条的CSS设置,那么您可以获取CSS并首先检查它.