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的上边框, 具有可比性
  • 相关阅读:
    ASP.NET HttpRuntime.Cache缓存类使用总结
    ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
    Echarts图表控件使用总结2(Line,Bar)—问题篇
    数据库查询实例(包含所有where条件例子)
    php file_get_contents读取大容量文件方法
    如何给mysql用户分配权限
    dedecms {dede:php}标签用法介绍
    js获取字符串最后一个字符代码
    CSS3选择器之学习笔记
    SQL中实现SPLIT函数几种方法
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13761210.html
Copyright © 2011-2022 走看看