• 元素可视区client系列和元素滚动 scroll 系列


    1.元素可视区 client 系列

    client 翻译过来就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等。

    注意:client 宽度/高度 和 offset 宽度/高度 最大的区别是它不包括边框

    2.元素滚动 scroll 系列

    2.1 元素 scroll 系列属性

    scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。 

     2.2 页面被卷去的头部

    如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发 onscroll 事件

    2.3案例:仿淘宝固定右侧侧边栏

    需求:

    1.原先侧边栏是绝对定位
    2. 当页面滚动到一定位置,侧边栏改为固定定位
    3. 页面继续滚动,会让返回顶部显示出来

    1. <!-- css样式 -->
    2. <style>
    3. * {
    4. margin: 0;
    5. padding: 0;
    6. }
    7. .w {
    8. width: 1200px;
    9. margin: 10px auto;
    10. }
    11. .header {
    12. height: 220px;
    13. background-color: pink;
    14. }
    15. .banner {
    16. height: 330px;
    17. background-color: skyblue;
    18. }
    19. .main {
    20. height: 1000px;
    21. background-color: purple;
    22. }
    23. .slide-bar {
    24. position: absolute;
    25. right: 30px;
    26. top: 480px;
    27. width: 80px;
    28. height: 200px;
    29. font-size: 18px;
    30. background-color: coral;
    31. }
    32. .goBack {
    33. display: none;
    34. position: absolute;
    35. bottom: 10px;
    36. }
    37. </style>
    38. <body>
    39. <!-- html结构 -->
    40. <div class="slide-bar">
    41. <span class="goBack">返回顶部</span>
    42. </div>
    43. <div class="header w">头部区域</div>
    44. <div class="banner w">banner区域</div>
    45. <div class="main w">主体部分</div>
    46. <!-- js代码 -->
    47. <script>
    48. // 1. 获取元素
    49. let slideBar = document.querySelector(".slide-bar");
    50. let goBack = document.querySelector('.goBack');
    51. let header = document.querySelector('.header');
    52. let banner = document.querySelector('.banner');
    53. let main = document.querySelector('.main');
    54. // 由于offsetTop是动态生成的,所以一定要写在滚动事件外面
    55. let bannerTop = banner.offsetTop;
    56. let slideBarTop = slideBar.offsetTop - bannerTop; // 变成固定定位时的top的值
    57. let mainTop = main.offsetTop;
    58. // 2. 绑定滚动事件 onscroll
    59. document.onscroll = function() {
    60. // (1) 当滚动条滚动到banner区域时,侧边栏变成固定定位,即页面被卷去的头部等于原始banner区域的offsetTop值
    61. if (window.pageYOffset >= bannerTop) {
    62. slideBar.style.position = 'fixed';
    63. slideBar.style.top = slideBarTop + 'px';
    64. } else {
    65. // 否则就变回绝对定位
    66. slideBar.style.position = 'absolute';
    67. slideBar.style.top = '480px';
    68. };
    69. // (2) 当滚动条滚动到main区域时,侧边栏中的返回顶部出现,即页面被卷去的头部等于原始main区域的offsetTop值
    70. if (window.pageYOffset >= mainTop) {
    71. goBack.style.display = 'block';
    72. } else {
    73. // 否则就隐藏该模块
    74. goBack.style.display = 'none';
    75. }
    76. }
    77. </script>
    78. </body>

    案例分析:

    ① 需要用到页面滚动事件 scroll 因为是页面滚动,所以事件源是 document
    ② 滚动到某个位置,就是判断页面被卷去的上部值。
    页面被卷去的头部:可以通过window.pageYOffset 获得 如果是被卷去的左侧 window.pageXOffset
    ④ 注意,元素被卷去的头部 element.scrollTop , 如果是页面被卷去的头部 则是 window.pageYOffset
    ⑤被卷去的值可以通过盒子的 offsetTop 得到,如果大于等于这个值,就让盒子变成固定定位

    3.三大系列总结

      

    它们的主要用法:
    1. offset系列 经常用于获得元素位置 offsetLeft、 offsetTop
    2. client 经常用于获取元素大小 clientWidth、 clientHeight
    3. scroll 经常用于获取滚动距离 scrollTop 、scrollLeft 
    4. 注意页面滚动的距离通过 window.pageXOffset 获得

     

  • 相关阅读:
    2022年3月13日安装和启动ActiveMQ遇到问题
    什么是HR管理系统?为您的企业提供高效的人力资源管理解决方案
    Ubuntu18.04创建用户缺少默认的下载、桌面目录
    JAVA计算机毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署
    Typora免费版本安装教程与使用
    1282_李杀_emacs示范配置文件init.el的配置简单分析
    Attention注意力机制学习(二)------->一些注意力网络整理
    java 随机数
    如何下载到正确版本的Steam?正确使用实现多开搬砖不被封号
    通过 JDK 源码学习灵活应用设计模式(上)
  • 原文地址:https://blog.csdn.net/JJ_Smilewang/article/details/125394461