问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js判断是否有滚动条

发布网友 发布时间:2022-04-29 03:27

我来回答

3个回答

懂视网 时间:2022-04-23 00:49

这次给大家带来JS 判断页面滚动条,JS 判断页面滚动条的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

最近在写插件的过程中,需要使用 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.innerHeight underfined,所以为了兼容 IE7、IE8,需要使用document.documentElement.clientHeight 属性计算窗口高度。

计算滚动条宽度的方法

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

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

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

总结

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

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

如何应用响应回写渲染页面

使用JS做出动画进度条功能

热心网友 时间:2022-04-22 21:57

if (document.documentElement.clientHeight < document.documentElement.offsetHeight-4) //减4是因为浏览器的边框是2像素, 否则会一直判断有滚动条 
{
    alert('有滚动条');  
}
else
{
    alert('没有'); 
}

热心网友 时间:2022-04-22 23:15

<script>
if(document.body.style.overflow!="hidden"&&document.body.scroll!="no"&&
document.body.scrollHeight>document.body.offsetHeight)
{
alert("有滚动条");
}else
{
alert("无滚动条");
}
</script>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小白开始做牛腩烧番茄前,应该做哪些准备? 普洱茶不管是纯料还是拼配它本身就很有意思 普洱茶的纯料VS拼配,谁更值得珍藏? 为什么我们听到熟悉的歌曲的音乐会感觉在唱歌词呢? abs制动防抱死系统什么时候用到 请问有谁知道离朝阳北路的煊特嘉园(炫特区)最近的浩沙健身俱乐部在哪 ... 朝阳北苑郊野公园有哪些 北苑哪些公园 北京北苑健身有哪些 王者荣耀黄忠开大怎么转圈 加澳门那边的是怎样加的?为什么加不了? JS有哪些属性可以判断页面是否存在滚动条 澳门居民申请微信实名认证用什么申请 js判断是页面中是否有滚动条 在澳门里面购物可以微信支付吗 通过JS 判断页面是否有滚动条的简单方法 淘宝双11预售便宜还是当天抢便宜? 双11预售款价格会不会比双11当天推出的价格高 恋恋不忘剧情介绍全集 手机QQ版本太低怎么下新的 澳门电话卡在大路可以申请吗 有没有类似恋恋不忘的电视剧或电影 双11抢先购和双11哪个更便宜?求解 &#x200B;&#x200B;&#x200B; 双十一什么时候买东西最便宜 双11预售和当天哪个便宜 怎么样才能让皮肤变的好起来? 关于如何让皮肤变好 怎么能让皮肤变好 面部疤痕整形医院对我们的皮肤好呢? 很想整形,可是几个医院的整形医生都说我五官很好,不用整。他们说想弄就弄皮肤吧。他们言下之意是什么? 我想学经济,金融。上海的哪个大学好一点 javascript如何判断浏览器是否有滚动条 js判断点击的是不是滚动条 上海哪个学校的金融系比较好? js/Jquery 怎么判断是否存在水平滚动条跟垂直滚动条 上海哪个大学金融专业最好? ...带滚动条的div标签,怎样判读滚动条是否滚动到底。用jquery或者js 用Javascript怎样计算页面的滚动条向下滚动了多少 肠癌会出现“1红、2臭、3痛”,这是指的什么? 狐臭有多臭 身份证被拉黑名单怎么查 增值税专用发票与普通发票有什么区别 增值税专用发票和普通发票的区别? 军事演戏 几年一次? 每次什么时候? 什么兵可以参加? 08当兵需要几年,包括士官都是几年? 手机qq登不上去了怎么办 每年军士官招收在什么时间?有哪些流程,比如体检考试等等。 预备役军官在服预备役期间应当参加几个月的军事训练 当兵是不是必须要满18岁,有哪些途径可以去当兵 18至22岁期间应当参加军事训练的时间