zoukankan      html  css  js  c++  java
  • DOM盒模型和位置 client offset scroll 和滚动的关系

    概览

    在dom里面有几个描述盒子位置信息的值,

    • pading border margin
    • width height
    • client
      • clientWidth 不要border
      • clientHeight 不要border
    • offset
      • offsetTop
      • offsetLeft
      • offsetWidth  要border
      • offsetHeight  要border
    • scroll
      • scrollTop
      • scrollHeight
      • scrollLeft
      • scrollWidth

    vi设计http://www.maiqicn.com 办公资源网站大全https://www.wode007.com

    盒模型

    生产环境一般使用 box-sizing: border-box,
    效果:
        width == content.width + pading + border
        height == content.height + pading + border

    .antd-pro-pages-test-dom-index-box {
        box-sizing: border-box;
         100px;
        height: 100px;
        padding: 5px;
        border-color: grey;
        border-style: solid;
        border- 5px;
        margin: 5px;
    }

    滚动

    <div class="container1" style="overflow: auto; height: 200px;  200px">
      <ul class="container2" style="position: relative">
         <li>1</li>
         <li>1</li>
         <li>1</li>
         <li>1</li>
      </ul>
    </div>
    // 把item 放在container的可视区域范围内
    function scrollToDom(container, item){
      // 当前元素 上边框上边 到 基线 的距离
        const itemTop = item.offsetTop;
      // 当前元素 下边框下边 到 基线 的距离
      const itemBottom = itemTop + item.offsetHeight;
      
      // container 上边框下边 距离 基线距离
      const containerTop = container.scrollTop;
      // container 下边框上边 距离 基线距离
      const containerBottom = containerTop + container.clientHeight;
      
      if(itemTop < containerTop){
         container.scrollTop = itemTop;
       }
      
      if(itemBottom > containerBottom){
         container.scrollTop = itemBottom - container.clientHeight;
      }
    }

    此种结构特点
    如果垂直滚动条已经出来了

    • .container1 的上下 padding 区域也会有内容

    向上滑动

    • 向上滑动, 实质是 .container2 向上滑动了
    • 因为.container2.position == relative  li.offsetParent  也是.container2 , 所以.container1.scrollTop 和 li.offsetTop 基准线都是.container2的上边框, 具有可比性
  • 相关阅读:
    (转)分布式系统原理
    Java常用排序
    19.Java5同步集合类的应用
    18.Java5阻塞队列的应用
    17.Java5的Exchanger同步工具
    16.Java5的CountDownLatch同步工具
    15.Java5的CyclicBarrier同步工具
    14.Java5的Semaphere同步工具
    13.Java5条件阻塞Condition的应用
    Docker部署JavaWeb项目实战
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13761210.html
Copyright © 2011-2022 走看看