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

盒模型

生产环境一般使用 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;
width: 100px;
height: 100px;
padding: 5px;
border-color: grey;
border-style: solid;
border-width: 5px;
margin: 5px;
}

滚动

<div class="container1" style="overflow: auto; height: 200px; width: 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的上边框, 具有可比性

DOM盒模型和位置 client offset scroll 和滚动的关系的更多相关文章

  1. DOM盒子模型常用属性client,offset和scroll

    JS盒子模型属性 在JS中通过相关的属性可以获取(设置)元素的样式信息,这些属性就是盒子模型属性(基本上都是有关于样式的) 属性 值 client top/left/width/height offs ...

  2. JavaScript概念之screen/client/offset/scroll/inner/avail的width/left 分类: JavaScript HTML+CSS 2015-05-27 16:42 635人阅读 评论(0) 收藏

    原文地址:http://caibaojian.com/js-name.html JS中获取各种宽度和距离,常常让我们混淆,各种浏览器的不兼容让我们很头疼,现在就在说说js中有哪些宽度和距离. 1.名词 ...

  3. JavaScript位置:window&client&offset&scroll&MouseEvent&getBoundingClientRect&计算任意元素滚动条宽度

    Window: window.innerWidth:浏览器viewport视口宽,包括垂直滚动条 window.innerHeight:浏览器视口高,包括水平滚动条 window.outerWidth ...

  4. JS中client/offset/scroll等的宽高解析

    原文地址:→传送门 window相关宽高属性 1. window.outerHeight (窗口的外层的高度) / window.outerWidth (窗口的外层的宽度) window.outerH ...

  5. client , offset , scroll 系列 及百度导航栏案例

    1. client 系列 示例 : <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  6. client,offset,scroll系列

    client(客户端),offset(偏移),scroll(滚动)1.client系列 clientTop 内容区域到边框顶部的距离 ,说白了,就是边框的高度 clientLeft 内容区域到边框左部 ...

  7. JS-特效 ~ 04. client对象、网页可视区域的宽高、client / offset / scroll 三大家族的区别、冒泡事件、事件委托、获取内嵌式和外链式属性getStyle(ele,attr) ;、缓动动画封装

    知识点: 模拟滚动条的解除事件问题 : event内置对象,包含 了大量事件: page兼容性: pageX || clientX + scool().top  : if (true === a)tr ...

  8. client offset scroll 之间的区别

    一.client 属性 值 clientWidth 元素被设置的宽度 + padding左右内间距 clientHeight 元素被设置的高度 + padding上下内间距 clientLeft 左 ...

  9. JS ——DOM,BOM(包含盒模型,动画)总结

    JS盒模型 content: 通过计算后样式获取padding + content: box.clientWidth | box.clientHeightborder + padding + cont ...

随机推荐

  1. JavaSE学习笔记(3)---面向对象三大特性

    JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...

  2. Python编辑器——Pycharm以及Sublime Text 3的安装教程

    近来工作繁忙,顾不上学习,但还是有些小兄弟问我有没有编写Python代码的工具以及安装方法,跟我吐槽说他安装后总是有问题.那么今天就来说一说Pycharm的安装,顺带说一下Sublime Text 3 ...

  3. ASP.NET Identity系列教程-2【Identity入门】

    https://www.cnblogs.com/r01cn/p/5177708.html13 Identity入门 Identity is a new API from Microsoft to ma ...

  4. gulp常用插件之gulp-inject使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-inject这个插件的作用与wiredep类似,不同的是可以自己任意指定需要插入文件的列表.它同样是利用注释来寻找插入的位置.获取源文件 ...

  5. python三器

    1.1 装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 ...

  6. 已知float后几位,谋几位保留

    设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式____. #include "common.h" #includ ...

  7. Burp Suite Professional 针对APP抓包篡改数据提交【安全】

    Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP 消息 ...

  8. DVA知识集合

    react与dva 原文地址:https://github.com/dvajs/dva-knowledgemap 1.变量声明 const DELAY = 1000 let count = 0 cou ...

  9. Fiddler抓取https方法

    基本配置 菜单 -> menu -> tool -> https 勾选"捕获https连接" 勾选"捕获https流量" 勾选"检查 ...

  10. Python学习笔记四:主要图表

    图表部分,很多要记忆的.以下来自于培训材料的记录. 但我个人觉得更重要的是要根据业务特点确定用什么样的图表,然后再去查具体的参数,光记住参数意义不是很大. import numpy as np imp ...