JavaScript - WebAPI - 滚动家族 - scroll家族

1.0-offset家族(元素自身大小)

offsetWidth:宽度,border(左右) + padding(左右)+content:getComputedStyle(元素)[width\border\padding]

offsetHeight:高度(与宽度逻辑一样)

offsetLeft:自己的border外部 到 定位父级 border的内部

offsetTop:与offsetLeft逻辑一样

offsetParent:定位父级

1.1-scroll家族(元素内容大小)

  • 1.offset家族:
    • offsetWidth、offsetHeight:获取元素自身的真实宽高(width+padding+border),不带单位,是number类型
    • offsetParent:获取一个元素的定位父级
    • offsetLeft、offsetTop:获取元素的外边框到定位父级的内边框的(左/上)距离
  • 2.scroll家族:(与offset家族类似,不带单位,number类型)
    • scrollWidth和scrollHeight:元素内容真实的宽高
    • scrollLeft和scrollTop:元素在滚动时超出内容区域的部分
    • onscroll:元素的滚动条事件,只要滚动就会触发

在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>滚动家族 - scroll家族</title>
        <style>
            .box {
                width: 200px;
                height: 200px;
                overflow: auto;
            }
        </style>
    </head>

    <body>
        <div class="box">
            <img src="images/slidepic6.jpg" alt="" />
        </div>

        <script>
            // 滚动家族: 给元素做滚动事件  onscroll

            const box = document.querySelector(".box");

            // 给盒子做滚动事件
            box.onscroll = function () {
                // console.log(1)

                // 滚动内容的真实宽高: scrollWidth / Height
                // console.log(box.scrollWidth, box.scrollHeight)   // 没有价值

                // 滚动距离: 往左和往上滚出去多少: scrollLeft/Top
                // console.log(box.scrollLeft, box.scrollTop)

                // 可以修改滚动距离
                box.scrollLeft = 100; // 有效: 可以修改
            };

            // 总结
            // 元素可以滚动: 条件 1. 内容要比盒子大, 2. overflow: auto
            // 元素滚动: 实际开发中,不会存在( 页面滚动 )
        </script>
    </body>
</html>

1.2-获取网页滚动距离 - 页面滚动

  • 1.获取页面的HTML元素和body元素
    • HTML:document.documentElement;
    • body: document.body;
  • 2.获取整个页面的滚动事件:window.onscroll
    • 没有兼容性
  • 3.获取页面的scrollTop和scrollLeft:存在浏览器兼容性
    • 谷歌/火狐 : window.pageXOffset (左) window. pageYOffset(上)
    • IE浏览器: document.documentElement.scrollLeft/Top
    • 某些浏览器:document.body.scrollLeft/Top
  • 4.封装一个获取页面滚出去距离的浏览器兼容性函数:利用逻辑或的短路
<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>💥 滚动家族 - 页面滚动</title>
        <style>
            body {
                width: 2000px;
                height: 2000px;
            }
        </style>
    </head>

    <body>
        <script>
            // 页面滚动: 给window做滚动事件
            window.onscroll = function () {
                // console.log(1)

                // 滚动距离: 元素.scrollLeft/Top
                // window不是元素: 没有scrollLeft和Top属性
                // console.log(window.scrollLeft)              // undefined

                // 获取滚动距离有兼容性
                // 谷歌: window.pageXOffset || pageYOffset
                // console.log(pageXOffset, pageYOffset)       // IE8及以下不支持

                // IE: html.scrollLeft/scrollTop
                // console.log(document.documentElement.scrollLeft)

                // 其他浏览器: body.scrollLeft/scrollTop
                // console.log(document.body.scrollLeft)

                // pageXOffset: 只能拿不能改
                // pageXOffset = 500                // 修改无效

                // 只有元素可以修改: 可以修改html或者body(主要是html)
                document.documentElement.scrollLeft = 500;

                // 假设需要通过js修改页面的滚动效果: 修改html.scrollLeft或者Top(修改Top居多)
            };
        </script>
    </body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值