Javascript 测试页面是否有水平滚动条(计算机和移动设备)
在网页上,我需要测试是否有水平滚动条(以便通过编程更改其他元素的css)。有什么方法可以使用jquery(或纯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
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发布的滚动功能检测是否适用于您的情况,请检查它