js怎么判断页面是否出现滚动条?多种方法

发布时间:2019-11-12编辑:脚本学堂
有关js判断页面是否出现滚动条的几种方法,判断横向滚动条的,也可以判断纵向滚动条,需要的朋友参考下。
1、js判断页面是否出现滚动条
用 document.documentElement,在页面头部加入声明:
复制代码 代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
if (document.documentElement.scrollHeight> document.documentElement.clientHeight){
//执行相关脚本
}

2、js判断页面是否出现滚动条
,用JS判断页面是否出现滚动条,在网上搜索到的代码:
当可视区域小于页面的实际高度时,判定为出现滚动条,即:
if (document.documentElement.clientHeight < document.documentElement.offsetHeight) scroll = true;
要使用 document.documentElement ,必须在页面头部加入声明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
其实,这段代码是不起作用的,因为他没考虑到一个问题,就是浏览器的边框,当在获取页面的offsetHeight高度时是包括了浏览器的边框的,浏览器的边框是2个像素,所以这时无论在任何情况下clientHeight 始终是小于offsetHeight的,这就使得即使没有滚动条它也为true,因此我们要修正这个错误,代码应该这样改,在offsetHeight上减去4个像素,即:
 

if (document.documentElement.clientHeight < document.documentElement.offsetHeight-4){
//执行相关脚本。
}

以上这代码是判断横向滚动条的,一般要判断的是纵向滚动,代码:
 

if (document.documentElement.clientWidth < document.documentElement.offsetWidth-4){
//执行相关脚本。

 

经测试,
document.documentElement.offsetHeight
在ie8,ff下有差别。
ff识别,ie8下不识别。
例子:
 

复制代码 代码示例:
<div style="height:850px;">649</div> 
<script type="text/javascript"> 
if (document.documentElement.clientHeight < document.documentElement.offsetHeight) scrolls = true; 
if (document.documentElement.clientHeight < document.documentElement.offsetHeight - 4) { 
alert('a'); 

alert( document.documentElement.offsetHeight) 
//alert(document.documentElement.clientHeight); 
</script> 

还是得用:
 

if (document.documentElement.clientHeight < document.body.offsetHeight ) { 
dosomething 

 

不同的浏览器差别,会出现不同的情况。javascript禁用浏览器滚动条  js 页面刷新记住滚动条位置   js动态隐藏滚动条

例子,没有出滚动条时,手工给增加一个滚动值会,给body或documentElement的scrollLeft、scrollTop赋值,
浏览器在没有出滚动条时,赋值后该值不会发生变化,始终是0。

扩展后,该检测方法,不仅可以检测页面滚动条,
传入要检测的节点,一样可以得到想要的结果。

代码:
 

复制代码 代码示例:
//(给scrollLeft,scrollTop赋负数值时会报错,此外scrollLeft,scrollTop的值不能大于实际最大的滚动值)
var isScroll = function (el) { 
// test targets 
var elems = el ? [el] : [document.documentElement, document.body]; 
var scrollX = false, scrollY = false; 
for (var i = 0; i < elems.length; i++) { 
    var o = elems[i]; 
    // test horizontal 
    var sl = o.scrollLeft; 
    o.scrollLeft += (sl > 0) ? -1 : 1; 
    o.scrollLeft !== sl && (scrollX = scrollX || true); 
    o.scrollLeft = sl; 
    // test vertical 
    var st = o.scrollTop; 
    o.scrollTop += (st > 0) ? -1 : 1; 
    o.scrollTop !== st && (scrollY = scrollY || true); 
    o.scrollTop = st; 

// ret 
return { 
    scrollX: scrollX, 
    scrollY: scrollY 
}; 
};