Javascript 测试页面是否有水平滚动条(计算机和移动设备)

Javascript 测试页面是否有水平滚动条(计算机和移动设备),javascript,jquery,html,cross-browser,scrollbar,Javascript,Jquery,Html,Cross Browser,Scrollbar,在网页上,我需要测试是否有水平滚动条(以便通过编程更改其他元素的css)。有什么方法可以使用jquery(或纯javascript)获取这些信息吗 我测试了 function isHorizontalScrollbarEnabled() { return $(document).width()!=$(window).width(); } 但它似乎并不适用于所有浏览器(例如,我测试过的最新三星手机就不适用)。我需要它与所有浏览器一起工作,包括最新的移动设备 谢谢大家! 编辑1 我测试了p

在网页上,我需要测试是否有水平滚动条(以便通过编程更改其他元素的css)。有什么方法可以使用jquery(或纯javascript)获取这些信息吗

我测试了

function isHorizontalScrollbarEnabled() {
    return $(document).width()!=$(window).width();
}
但它似乎并不适用于所有浏览器(例如,我测试过的最新三星手机就不适用)。我需要它与所有浏览器一起工作,包括最新的移动设备

谢谢大家!

编辑1

我测试了plalx和laconbass提供的解决方案,测试了IE8、Firefox、Chrome和iPad。可与IE、Firefox和Chrome配合使用,但与iPad不同

问题似乎与移动设备上的缩放功能有关:尽管如此,当我在iPad上放大时,会出现一个水平滚动条,
文档
窗口
文档。机身
宽度不变(我今天早些时候测试过的三星手机也存在同样的问题)

以下是我用来测试的代码:

<!DOCTYPE html>
<html lang="en">
    <head>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
      <title>test</title>
    </head>

    <body>
      <div style="width: 500px; background: red;" id="test">click here to test</div>
      <script type="text/javascript">
        var i = 1;
        $("#test").click(function(){
          $(this).html("Test #" + (i++) 
    + "<br>document width=" + $(document).width() + ", windows width=" + $(window).width()
    + "<br>document width=" + $(document).width() + ", body width=" + $(document.body).width()
          );  
        });     
      </script>
    </body>
</html>

测试
单击此处进行测试
var i=1;
$(“#测试”)。单击(函数(){
$(this).html(“Test#”+(i++)
+“
文档宽度=“+$(文档).width()+”,窗口宽度=“+$(窗口).width() +“
文档宽度=“+$(document.width()+”,正文宽度=“+$(document.body.width()) ); });
你知道如何在iPad等移动设备上放大/缩小后检测出水平滚动条的存在吗

//scrol 1px to the left
$(document).scrollLeft(1);

if($(document).scrollLeft() != 0){
   //there's a scroll bar
}else{
   //there's no scrollbar
}

//scroll back to original location
$(document).scrollLeft(0);

这是因为如果没有可用的滚动条,JQuery将无法滚动屏幕。

编辑2:我投了反对票,因为这对页面无效,所以我根据@Pabs123的答案构建了一个通用解决方案,只是为了好玩:

函数hasScrollX(选择器){
变量e=$(选择器),fn='scrollLeft';
返回e[fn](1)和&e[fn]()>0和&e[fn](0)和&true;
}
甚至

jQuery.fn.hasScrollX=函数(){
var fn='scrollLeft';
返回此[fn](1)和&this[fn]()>0和&this[fn](0)和&true;
}
查看它,以及如何轻松调整它以检测垂直滚动条的存在

编辑:在chrome和firefox上测试和工作。当jQuery团队进行交叉浏览工作时,我建议使用jQuery而不是原生javascript

我很好奇如何以一种优雅的方式做到这一点,而不是以前建议的方式(实际上是可行的)

下面的比较对我很有用

$(文档).width()>$(窗口).width()

你可以看到它正在运行,并且

可能与我在那篇文章中尝试的解决方案重复,该解决方案与chrome兼容,但与firefox兼容,
$(“body”)[0]。scrollWidth
$(“body”)[0].clientWidth
即使有一个水平滚动条,也是相等的。@plalx可能问题是相同的,但我更清楚这一个你解决了这个问题吗?功能性但不优雅,我喜欢它,因为它是检测对象功能,而不是用数学理论来确定是否有滚动条。实际上,我认为它更优雅。@Binky3000先生我同意这样一个事实,即检测功能比理论计算更正确。我不同意它更优雅,优雅不是唯一的特征。重构肯定会改变我的看法;)当
elem.get(0.scrollWidth>elem.width()
在Chrome中失败时,此解决方案可以工作+例如,1不适用于此网站。我看到很多答案都实现了此解决方案,但它在文本区域中对我来说并不可靠。@t请检查pabs123发布的滚动功能检测是否适用于您的情况,请检查它