最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • javascript 基础- 获取屏幕高度

    正文概述 掘金(狂奔的小和尚)   2021-07-11   529

    是什么

    在日常开发中,我们会写 回到顶部、滚动条加载数据 等常用功能,这时候,我们不得不提到用 js 获取页面高度的问题。

    如获取当前元素到页面底部的距离, 如获取文档网页底部到可视区窗口距离等,我们需要了解以下 API

    讲什么

    1. 文档高度与宽度
    2. 可视区域高度与宽度
    3. 当前元素高度与宽度
    4. 带滚动条:获取纵向滚动条高度
    5. 带滚动条:获取横向滚动条长度
    6. 获取元素到视口的距离
    7. event 对象中的值
    8. 常用公式
    9. 实用案例
    10. 总结

    文档高度与宽度

    即是 document 的高度/宽度, 它通常和滚动条相互关联判断操作

    1. document.documentElement 获取文档元素。($(document).height())
    2. 当没有滚动条时 scrollHeight 和 clientHeight 相同,事实上各种浏览器有不同的处理,通常兼容性写法是取这俩中最大者。
    function getPageInfo() {
      return {
        width: Math.max(
          document.documentElement.scrollWidth,
          document.documentElement.clientWidth
        ),
        height: Math.max(
          document.documentElement.scrollHeight,
          document.documentElement.clientHeight
        ),
      };
    }
    

    可视区域高度与宽度

    即是 当前可视区域的高度 和 宽度, 它通常和滚动条相互关联判断操作

    1. document.documentElement 获取文档元素。($(window).height())
    2. 可视区域高度与宽度 是 文档高度与宽度的子集
    3. jq 写法 $(window).height(); $(window).width();
    function getViewport() {
      return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight,
      };
    }
    

    当前元素高度与宽度

    即是当前元素的真实高度,与滚动条操作无关

    1. $(ele).height() 获取元素的真实高度
    2. $(ele).width() 获取元素的真实宽度
    3. 当出现滚动条的时候, 我们可以使用 $(ele).offset().top 来获取当前元素距顶部的距离
    function getEleTop(el) {
      let offsetTop = el.offsetTop;
      let current = el.offsetParent;
      while (current !== null) {
        offsetTop += current.offsetTop;
        current = current.offsetParent;
      }
      return offsetTop;
    }
    

    带滚动条:获取纵向滚动条高度

    function getScrollTop() {
      let doc = document;
      return Math.max(doc.body.scrollTop, doc.documentElement.scrollTop);
    }
    

    带滚动条:获取横向滚动条长度

    function getScrollLeft() {
      let doc = document;
      return Math.max(doc.body.scrollLeft, doc.documentElement.scrollLeft);
    }
    

    获取元素到视口的距离

    使用 getBoundingClientRect 方法返回元素的大小及其相对于视口的位置。

    如果是标准盒子模型,元素的尺寸等于 width/height + padding + border-width 的总和。如果 box-sizing: border-box,元素的的尺寸等于 width/height。

    1. 方法返回的一组矩形的集合
    2. left, top, right, bottom, x, y, width, 和 height 这几个以像素为单位的只读属性用于描述整个边框。
    3. width 和 height 以外的属性是相对于视图窗口的左上角来计算的。
    var rect = obj.getBoundingClientRect();
    

    event 对象中的值

    在绑定事件的时候,通常 js 会返回一个 event 对象,这个对象返回了当前元素的相关信息。

    1. event.screenY 当前元素的屏幕-滚动距离,它包含可视区域未显示的部分(它最大)
    2. event.pageY 当前元素的 clientY + ScrollY 距离(它第二大)
    3. event.clientY 当前元素的可视区域-滚动距离,它只包含可视区域部分(它第三大)
    4. event.offsetY 当前元素距离父元素的距离(它第四大)

    常用公式

    1. 文档底部与可视区窗口底部的距离 = 文档总高度(document) - 文档滚动高度(scroll) - 可视区窗口高度(view)
    2. 当前元素与底部的距离 = 可视区窗口高度(view) + 文档滚动高度(scroll) - 当前元素与页面顶部距离(offset) - 当前元素高度 (ele.height)

    实用案例

    返回顶部

    function goTop() {
      const goTop = document.querySelector(".goTop");
      const rootElement = document.documentElement;
      const scrollTotal = rootElement.scrollHeight - rootElement.clientHeight;
      if (rootElement.scrollTop / scrollTotal > 0.8) {
        goTop.classList.add("showBtn");
      } else {
        goTop.classList.remove("showBtn");
      }
    }
    
    document.addEventListener("scroll", goTop);
    

    滚动导航

    window.addEventListener("scroll", goTop);
    function goTop() {
      var nav = document.getElementById("item-nav");
      var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
      if (scrollTop > 65) {
        nav.style.top = "20px";
      } else {
        nav.style.top = 80 - scrollTop + "px";
      }
    }
    

    上下滚动时判断元素在视口中出现

    document.onscroll = () => {
      let dom = document.getElementById("box");
      let top = getElementTop(dom); // 元素距页面高度
      let scrollTop = getScrollTop(); // 获取滚动条高度
      let viewPortHeight = getViewport().height; // 获取视口宽高
    
      if (top > scrollTop && top <= scrollTop + viewPortHeight) {
        console.log("元素出现");
      }
    };
    
    document.onscroll = () => {
      let $dom = $("#box");
      let top = $dom.offset().top;
      let scrollTop = $(window).scrollTop();
      let viewPortHeight = $(window).height();
    
      if (top > scrollTop && top <= scrollTop + viewPort.height) {
        console.log("元素出现");
      }
    };
    

    总结

    网页可见区域宽:document.body.clientWidth
    网页可见区域高:document.body.clientHeight
    网页可见区域宽:document.body.offsetWidth (包括边线的宽)
    网页可见区域高:document.body.offsetHeight (包括边线的宽)
    网页正文全文宽:document.body.scrollWidth
    网页正文全文高:document.body.scrollHeight
    网页被卷去的高:document.body.scrollTop
    网页被卷去的左:document.body.scrollLeft
    网页正文部分上:window.screenTop
    网页正文部分左:window.screenLeft
    屏幕分辨率的高:window.screen.height
    屏幕分辨率的宽:window.screen.width
    屏幕可用工作区高度:window.screen.availHeight
    屏幕可用工作区宽度:window.screen.availWidth
    

    起源地下载网 » javascript 基础- 获取屏幕高度

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元