博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过 JS 判断页面是否有滚动条的简单方法
阅读量:7098 次
发布时间:2019-06-28

本文共 1413 字,大约阅读时间需要 4 分钟。

前言

最近在写插件的过程中,需要使用 JS 判断是否有滚动条,搜了一下,大致方法都差不多,但都有些啰嗦,代码不够简洁。最终通过参考不同方法,写了一个比较简单的方法。在判断滚动条的同时也需要计算滚动条的宽度,通过本篇文章一并与大家分享。

为什么要判断滚动条

判断滚动条的需求在弹窗插件中用的较多,因为弹窗大多会添加 overflow: hidden 的属性,如果页面比较长的话,添加这个属性之后页面会有晃动。

为了增强用户体验,通过判断是否有滚动条而添加 margin-left 属性以抵消 overflow: hidden 之后的滚动条位置。

判断是否有滚动条的方法

其实只需要一行 JS 就可以,测试兼容 IE7

function hasScrollbar() {    return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);}

一般情况下,使用 document.body.scrollHeight > window.innerHeight 就可以判断。

但是在 IE7,IE8 中 window.innerHeightunderfined,所以为了兼容 IE7、IE8,需要使用 document.documentElement.clientHeight 属性计算窗口高度。

计算滚动条宽度的方法

还是以弹窗为例,因为 IE 10 以上以及移动端浏览器的滚动条都是不占据页面宽度的透明样式(其中 IE 10 以上浏览器可以通过 CSS 属性还原原始的滚动条样式),所以为了进一步增强用户体验,我们还需要计算滚动条的宽度,根据情况添加合理的 margin-left 数值。

计算滚动条宽度的方法比较简单,新建一个带有滚动条的 div 元素,通过该元素的 offsetWidthclientWidth 的差值即可获得,我在此借鉴 Magnific-popup 中的方法

function getScrollbarWidth() {    var scrollDiv = document.createElement("div");    scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';    document.body.appendChild(scrollDiv);    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;    document.body.removeChild(scrollDiv);    return scrollbarWidth;}

总结

使用 JS 实现一个功能可能并不困难,但作为编程人员应该时刻思考如何更简单更优雅的实现这个功能,并且时刻以提升用户体验为原则。对于条件判断,也许十行的逻辑判断可能只需要一行,最近感受极为深刻,而且要善于使用三元表达式替代 if..else 来精简代码。

转载于:https://www.cnblogs.com/nzbin/p/8117535.html

你可能感兴趣的文章
C++版银行家算法
查看>>
deepin中配置robot framework环境
查看>>
VMware-ESXI RHCS中fence配置
查看>>
深度解析Java内存的原型
查看>>
未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误。
查看>>
Php的时区问题
查看>>
安装HP P2000存储安装步骤
查看>>
NSURLSession不走代理方法的原因
查看>>
Java之JVM内存结构、Java内存模型、Java对象模型
查看>>
distribute-list分发列表详解
查看>>
关于Oracle归档进程的运行机制
查看>>
mail退信分析大全
查看>>
grep命令以及正则表达式,算数运算.
查看>>
九月细说"纯文本链接"
查看>>
IOPS 测试
查看>>
微信公众账号运营培训内部教程
查看>>
20170713L08-00老男孩Linux运维实战培训-DELL R710服务器RAID配置实战演示
查看>>
redis的批量删除
查看>>
php生成随机密码的几种方法
查看>>
我的友情链接
查看>>