我只想要一些简单的 JQ/JS 来检查当前页面/窗口(不是特定元素)是否有垂直滚动条。
谷歌搜索给我的东西对于这个基本功能来说似乎过于复杂。
如何才能做到这一点?
我只想要一些简单的 JQ/JS 来检查当前页面/窗口(不是特定元素)是否有垂直滚动条。
谷歌搜索给我的东西对于这个基本功能来说似乎过于复杂。
如何才能做到这一点?
$(document).ready(function() {
// Check if body height is higher than window height :)
if ($("body").height() > $(window).height()) {
alert("Vertical Scrollbar! D:");
}
// Check if body width is higher than window width :)
if ($("body").width() > $(window).width()) {
alert("Horizontal Scrollbar! D:<");
}
});
试试这个:
var hasVScroll = document.body.scrollHeight > document.body.clientHeight;
但是,这只会告诉您垂直 scrollHeight 是否大于可查看内容的高度。该hasVScroll
变量将包含true或false。
如果您需要进行更彻底的检查,请将以下内容添加到上面的代码中:
// Get the computed style of the body element
var cStyle = document.body.currentStyle||window.getComputedStyle(document.body, "");
// Check the overflow and overflowY properties for "auto" and "visible" values
hasVScroll = cStyle.overflow == "visible"
|| cStyle.overflowY == "visible"
|| (hasVScroll && cStyle.overflow == "auto")
|| (hasVScroll && cStyle.overflowY == "auto");
我尝试了上一个答案,但似乎没有起作用 $("body").height() 不一定代表整个 html 高度。
我已更正解决方案如下:
// Check if body height is higher than window height :)
if ($(document).height() > $(window).height()) {
alert("Vertical Scrollbar! D:");
}
// Check if body width is higher than window width :)
if ($(document).width() > $(window).width()) {
alert("Horizontal Scrollbar! D:<");
}
让我们把这个问题从死里复活 ;) 谷歌没有给你一个简单的解决方案是有原因的。特殊情况和浏览器怪癖会影响计算,并没有看起来那么简单。
不幸的是,到目前为止,这里列出的解决方案存在问题。我完全没有贬低它们的意思——它们是很好的起点,并且触及了更强大的方法所需的所有关键属性。但我不建议从任何其他答案中复制和粘贴代码,因为
$( document ).width()
并.height()
成为jQuery 对文档大小的错误检测的牺牲品。window.innerWidth
,如果浏览器支持的话,会让你的代码在手机浏览器中检测不到滚动条,滚动条的宽度一般为0。它们只是临时显示为一个叠加,不占用文档空间. 在移动设备上缩放也成为一个问题(长话短说)。html
和body
元素的溢出显式设置为非默认值时,检测可能会被取消(然后发生的事情有点复杂 - 请参阅此描述)。我花了比我想象的更多的时间来寻找“有效”的解决方案(咳嗽)。我提出的算法现在是插件jQuery.isInView 的一部分,它公开了一个.hasScrollbar
方法。如果您愿意,请查看源。
在您完全控制页面并且不必处理未知 CSS 的情况下,使用插件可能有点过分——毕竟,您知道哪些边缘情况适用,哪些不适用。但是,如果您需要在未知环境中获得可靠的结果,那么我认为这里列出的解决方案还不够。您最好使用经过良好测试的插件 - 我的或其他任何人。
这个对我有用:
function hasVerticalScroll(node){
if(node == undefined){
if(window.innerHeight){
return document.body.offsetHeight> window.innerHeight;
}
else {
return document.documentElement.scrollHeight >
document.documentElement.offsetHeight ||
document.body.scrollHeight>document.body.offsetHeight;
}
}
else {
return node.scrollHeight> node.offsetHeight;
}
}
对于身体,只需使用hasVerticalScroll()
.