JS判断页面是否出现滚动条

转载地址:http://www.cnblogs.com/yazdao/archive/2010/12/06/1897742.html

下面是在网上搜索到的代码:

用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){

//执行相关脚本。

}


 

 

在Vue中判断是否出现滚动条,可从不同维度着手。对于特定元素,可通过判断该元素的`scrollHeight`与`clientHeight`(垂直方向)或`scrollWidth`与`clientWidth`(水平方向)的大小关系来确定是否出现滚动条,同时要注意排除`overflow`设置为`hidden`的情况;对于页面整体,则可通过比较`document.documentElement`或`document.body`的相关属性来判断。 ### 判断特定元素是否出现滚动条 可以封装一个函数`hasScrolled`来判断元素是否出现滚动条,该函数会考虑元素的`overflow`属性设置。以下是代码示例: ```javascript function hasScrolled(ele, dir = "vertical") { // 判断的方向是否设置了overflow: hidden; let style = window.getComputedStyle(ele); if ( (dir === "vertical" && style.overflowY === "hidden") || (dir === "horizontal" && style.overflowX === "hidden") ) return false; // 在判断完overflow不为hidden后,再通过两个属性来判断。 if (dir === "vertical") { return ele.scrollHeight > ele.clientHeight; } else { return ele.scrollWidth > ele.clientWidth; } } export default { mounted() { const element = this.$refs.dom; // 假设通过ref获取元素 const hasVerticalScroll = hasScrolled(element, "vertical"); const hasHorizontalScroll = hasScrolled(element, "horizontal"); console.log('是否有垂直滚动条:', hasVerticalScroll); console.log('是否有水平滚动条:', hasHorizontalScroll); } } ``` 在上述代码中,`hasScrolled`函数接收元素`ele`和方向`dir`作为参数,通过`window.getComputedStyle`获取元素的样式,判断`overflow`属性是否为`hidden`,若不为`hidden`,则比较`scrollHeight`与`clientHeight`或`scrollWidth`与`clientWidth`的大小,以此确定是否出现滚动条。在`mounted`钩子中,通过`$refs`获取元素并调用`hasScrolled`函数进行判断。 ### 判断页面整体是否出现滚动条 可以通过比较`document.documentElement`或`document.body`的`scrollHeight`与`clientHeight`来判断页面是否出现垂直滚动条。以下是代码示例: ```javascript export default { mounted() { const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; const hasScrollbar = scrollHeight > clientHeight; console.log('页面是否有垂直滚动条:', hasScrollbar); } } ``` 在上述代码中,在`mounted`钩子中获取`document.documentElement`或`document.body`的`scrollHeight`和`clientHeight`,比较两者大小来判断页面是否出现垂直滚动条
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值