JS有哪些属性可以判断页面是否存在滚动条

这次给大家带来JS有哪些属性可以判断页面是否存在滚动条,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 数值。

JS有哪些属性可以判断页面是否存在滚动条

计算滚动条宽度的方法比较简单,新建一个带有滚动条的 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 来精简代码。

原理就是判断 是文档高度大于可视区域高度。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

vue.js项目nginx部署步骤详解

常用的6大JS排序算法与比较

webpack源码中loader机制使用须知

以上就是JS有哪些属性可以判断页面是否存在滚动条的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2765822.html

(0)
上一篇 2025年3月8日 11:03:35
下一篇 2025年3月3日 23:01:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Nuxt.js实现服务端渲染步骤详解

    这次给大家带来Nuxt.js实现服务端渲染步骤详解,Nuxt.js实现服务端渲染的注意事项有哪些,下面就是实战案例,一起来看一下。 2016 年 10 月 25 日,zeit.co 背后的团队对外发布了一个 React 的服务端渲染应用框架…

    2025年3月8日 编程技术
    200
  • JS访问DOM对象选中节点方法

    这次给大家带来JS访问DOM对象选中节点方法,JS访问DOM对象选中节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 使用getElementById()方法来访问指定id的节点,并用nodeName属性、nodeType属…

    2025年3月8日
    200
  • JS操作DOM删除节点

    这次给大家带来JS操作DOM删除节点,JS操作DOM删除节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 删除节点通过使用removeChild()方法来实现。 removeChild()方法用来删除一个子节点。 obj. …

    编程技术 2025年3月8日
    200
  • JS操作DOM插入节点

    这次给大家带来JS操作DOM插入节点,JS操作DOM插入节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 插入节点通过使用insertBefore()方法来实现。 insertBefore()方法将在另一个子节点前插入新的子…

    编程技术 2025年3月8日
    200
  • AngularJS模块化应用

    这次给大家带来AngularJS模块化应用,AngularJS模块化应用的注意事项有哪些,下面就是实战案例,一起来看一下。 一.模块化的好处 (1)实现逻辑更清晰、可读性强;(2)团队开发分工明确,容易控制;(3)充分利用可以重用代码;(4…

    编程技术 2025年3月8日
    200
  • D3.js做出动态仪表盘

    这次给大家带来D3.js做出动态仪表盘,D3.js做出动态仪表盘的注意事项有哪些,下面就是实战案例,一起来看一下。 动态效果图: 仪表盘效果图 细看上面的动态效果图,可以发现: 一个值变换到一个新的值时,是一个渐变的过程; 圆弧末尾有一个竖…

    2025年3月8日
    200
  • vue.js点击操作class

    这次给大家带来vue.js点击操作class,vue.js点击操作class的注意事项有哪些,下面就是实战案例,一起来看一下。 最近使用vue需要实现一个点餐选择商品规格的页面,需要通过vue动态的给被点击的元素添加class名字,使其变色…

    2025年3月8日
    200
  • JS实现停留在界面提示框

    这次给大家带来JS实现停留在界面提示框,JS实现停留在界面提示框的注意事项有哪些,下面就是实战案例,一起来看一下。 业务场景:当鼠标移入某元素时,显示提示框进行介绍。当鼠标移除时,会自动消失。引入ToolTip.js和ToolTip.css…

    2025年3月8日 编程技术
    200
  • 实现js同源策略与跨域访问步骤详解

    这次给大家带来实现js同源策略与跨域访问步骤详解,实现js同源策略与跨域访问的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 什么是同源策略 理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。 …

    编程技术 2025年3月8日
    200
  • nodejs多版本管理使用详解

    这次给大家带来nodejs多版本管理使用详解,nodejs多版本管理使用的注意事项有哪些,下面就是实战案例,一起来看一下。 windows 官网推荐使用 nvmw 或者 nvm-windows ;其他产品 nodist nvmw 注意事项准…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论