Javascript 用jQuery检测滚动条的存在仍然困难吗?
我知道检测滚动条的存在应该是我们都必须经历的难以捉摸的事情之一。到目前为止,我所读到的是,您无法真正检测滚动条的存在,只能在DOM中使用提示来知道它们是否存在,并且不能在少于30行的代码中完成Javascript 用jQuery检测滚动条的存在仍然困难吗?,javascript,jquery,scrollbar,Javascript,Jquery,Scrollbar,我知道检测滚动条的存在应该是我们都必须经历的难以捉摸的事情之一。到目前为止,我所读到的是,您无法真正检测滚动条的存在,只能在DOM中使用提示来知道它们是否存在,并且不能在少于30行的代码中完成 到了2010年,这听起来有点不可能。jQuery是否有一个跨浏览器的可靠解决方案来解决这个问题,并且至少在大多数情况下都能正常工作?请帮忙,我在拔头发,一半已经在地板上了 可能没有您希望的那么优雅,但这是对我最近编写的用于计算视口高度的脚本的适当改编 从逻辑上讲,您应该在文档就绪和窗口大小调整上调用此函数
到了2010年,这听起来有点不可能。jQuery是否有一个跨浏览器的可靠解决方案来解决这个问题,并且至少在大多数情况下都能正常工作?请帮忙,我在拔头发,一半已经在地板上了 可能没有您希望的那么优雅,但这是对我最近编写的用于计算视口高度的脚本的适当改编 从逻辑上讲,您应该在
文档就绪
和窗口大小调整
上调用此函数
它还处理Opera(第2行)和IE7(第6行)中遇到的不一致
函数滚动条(){
var viewportHeight=window.innerHeight?window.innerHeight:$(window.height();
if(jQuery.browser.msie){
if(parseInt(jQuery.browser.version)==7){
视口高度-=3;
}
}
if(viewportHeight)这可能是一种幼稚的方法,但是var scrollbar\u present=$(document.height>$(window.height()有什么问题
?我还没有深入研究jQuery实现来了解这一行实现的是什么普通javascript代码。这可能就是我所需要的吗?如果这是jQuery中的标准方式,那么我肯定会使用它。有人反对这个解决方案吗?@Yaggo,好的,我刚刚测试了$(document).height>$(window.height()
无论我是否看到滚动条,它都会给我false。所以我猜它可能不起作用。抱歉,有一个拼写错误,更正了版本:var scrollbar\u present=$(文档)。height()>$(窗口)。height()
。在Safari上对我有效。+1很好,但它没有考虑到溢出:隐藏
,这可能会阻止滚动条出现。我认为只要#wrapper
不是带有溢出:隐藏
的元素,它就可以工作。比如说它被包装在#外部包装
中,并且有溢出:嗨dden
;包装器的高度不会保持不变吗?您还可以将最后几行重构为一行,如下所示(viewportHeight我想你甚至可以把?true:false
从结尾敲下来,但不知何故,我懒得检查我的语法。你确定你的#wrapper
占据了它的全部内容吗?也许你可以在结尾尝试一个clearfix?你可以只写return viewportHeight==!=
是boolea吗n运算符。
function scrollbar() {
var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height();
if (jQuery.browser.msie) {
if(parseInt(jQuery.browser.version) == 7) {
viewportHeight -= 3;
}
}
if(viewportHeight <= $('#wrapper').height()) {
return true;
} else {
return false;
}
}