标签: scroll

  • scroll/offset/client获取宽高、位置

    scroll

    获取宽高

    scrollWidth

    只读

    Element.scrollWidth 这个只读属性是元素内容宽度的一种度量,包括由于overflow溢出而在屏幕上不可见的内容。

    scrollWidth的值等于内容的width + padding(包含伪元素,不包含滚动条)

    注意是内容的宽度,包括溢出的内容,无论是否隐藏溢出的内容.(scrollHeight同理)

    Element.scrollWidth – Web API 接口参考 | MDN

    scrollHeight

    只读

    Element.scrollHeight 这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。

    scrollHeight的值等于内容的height + padding(不包含滚动条)

    Element.scrollHeight – Web API 接口参考 | MDN

    获取位置

    scrollTop

    读 / 写

    Element.scrollTop 属性可以获取或设置一个元素的内容垂直滚动的像素数.

    • 一个元素的 scrollTop 值是这个元素的内容顶部(卷起来的)到它的视口可见内容(的顶部)的距离的度量。
    • 当一个元素的内容没有产生垂直方向的滚动条,那么它的 scrollTop 值为0.

    简单理解:向下滚动多少

    例:

    //检测页面滚动的头部距离(被卷去的头部)
    document.documentElement.scrollTop
    

    Element.scrollTop – Web API 接口参考 | MDN

    scrollLeft

    读 / 写

    Element.scrollLeft 属性可以读取或设置元素滚动条到元素左边的距离。

    Element.scrollLeft – Web API 接口参考 | MDN

    offset

    获取宽高

    offsetWidth / offsetHeight

    只读

    offsetWidth是测量包含元素的边框(border)、内边距(padding)、滚动条(scrollbar)(如果存在的话)、以及CSS设置的宽度(width)的值,不包含伪元素.

    它等于元素实际展现的宽度 / 高度

    例:

    <!-- css -->		
    <style>
    .box {
    	width: 100px;
    	height: 100px;
    	padding: 10px;
    	border: 1px solid #333;
    }
    </style>
    
    <!-- html -->
    <div class="box"></div>
    
    <!-- js -->
    <script>
    	let box = document.querySelector('.box')
      console.log(box.offsetWidth)   // 122 = width + padding + border
    	console.log(box.offsetHeight) // 122 =  height + padding + border
    </script>
    

    HTMLElement.offsetWidth – Web API 接口参考 | MDN

    HTMLElement.offsetHeight – Web API 接口参考 | MDN

    获取位置

    offsetTop / offsetLeft

    只读

    获取元素距离自己定位父级元素的上 / 左距离

    如果都没有则以文档左上角为准

    拓展阅读:HTMLElement.offsetParent – Web API 接口参考 | MDN

    client

    获取宽高

    clientWidth / clientHeight

    只读

    获取元素的可见部分宽高(不包含边框,滚动条等)

    Element.clientWidth – Web API 接口参考 | MDN

    获取位置

    clientTop / clientLeft

    只读

    获取上边框border和左边框border宽度

  • 滚动事件与加载事件

    滚动事件

    事件名:scroll

    文档视图或者一个元素在滚动时,会触发元素的scroll事件。

    例:

    //监听整个页面滚动
    window.addEventListener('scroll',function(){})
    //给 window 或 document 添加 scroll 事件
    

    监听某个元素的内部滚动直接给某个元素加即可.

    加载事件

    加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件.

    事件名:load

    当整个页面及所有依赖资源如样式表和图片都已完成加载时,将触发load事件。

    它与DOMContentLoaded不同,后者只要页面DOM加载完成就触发,无需等待依赖资源的加载。

    例:

    //监听页面所有资源加载完毕
    window.addEventListener('load',function(){})
    

    注意:不光可以监听整个页面资源加载完毕,也可以针对某个资源绑定load事件

    load | MDN

    事件名:DOMContentLoaded

    document添加

    当纯HTML被完全加载以及解析时,DOMContentLoaded 事件会被触发,而不必等待样式表,图片或者子框架完成加载。

    //监听页面DOM加载完毕:
    //给 document 添加 DOMContentLoaded 事件
    document.addEventListener('DOMContentLoaded',function(){})

    Document: DOMContentLoaded 事件 | MDN