PC端网页特效—元素偏移量 offset 系列(获取鼠标在盒子内部的坐标)、元素可视区 client 系列、元素滚动 scroll 系列( 页面被卷去的头部、仿淘宝固定右侧侧边栏)

Tip:在前面学习了JS基础、DOM 和 BOM 的基本操作后,这部分主要学习这些知识的拓展应用。

目标:

  • 能够说出常见offset系列属性的作用
  • 能够说出常见client系列属性的作用
  • 能够说出常见scroll系列属性的作用
  • 能够封装简单动画函数
  • 能够写出网页轮播图案例
     

1. 元素偏移量 offset 系列

1.1 offset 概述

offset 翻译过来就是偏移量,我们使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)、大小等。

  • 获得元素距离带有定位父元素的位置
  • 获得元素自身的大小(宽度高度)
  • 注意:返回的数值都不带单位

offset 系列常用属性

offset系列属性 作用 
element.offsetParent 返回作为该元素带有定位的父级元素如果父级都没有定位则返回body 
element.offsetTop 返回元素相对带有定位父元素上方的偏移 
element.offsetLeft 返回元素相对带有定位父元素左边框的偏移 
element.offsetWidth 返回自身包括padding、边框、内容区的宽度,返回数值不带单位 
element.offsetHeight 返回自身包括padding、边框、内容区的高度,返回数值不带单位 
<style>
        * {
            margin: 0;
            padding: 0;
        }

        .father {
            position: relative;
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 150px;
        }

        .son {
            width: 120px;
            height: 120px;
            background-color: rosybrown;
            margin-left: 45px;
        }

        .w {
            width: 200px;
            height: 200px;
            background-color: skyblue;
            margin: 0 auto 200px;
        }
    </style>
</head>

<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <div class="w"></div>
    <script>
        // offset系列
        var father = document.querySelector('.father');
        var son = document.querySelector('.son');
        // 可以得到元素的偏移量 位置 返回不带单位的数值
        console.log(father.offsetTop);  //150
        console.log(father.offsetLeft);  //150
        // 它以带有定位的父元素为准,如果没有父元素或者没有定位,则以body为准
        console.log(son.offsetLeft);  //父亲定位之前是195,定位之后是45

        // 2. 获得元素自身的大小(宽度高度),如果有padding或border就加上相应的值
        var w = document.querySelector('.w');
        console.log(w.offsetWidth);   //200
        console.log(w.offsetHeight);   //200 

        // 3. 返回带有定位的父元素,否则返回的是body
        console.log(son.offsetParent); //返回父亲
        console.log(son.parentNode); //返回父亲 一级的父亲 不管有没有定位
    </script>
</body>

1.2 offset 与 style 的区别

1.2.1 offset

  • offset 可以得到任意样式表中的样式值
  • offset 系列获得的数值是没有单位
  • offsetWidth 包含 padding+border+width
  • offsetWidth 等属性是只读属性,只能获取不能赋值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取当前在 `scroll-view` 内可视的元素,可以使用 `scroll-view` 的 `scroll-into-view` 属性和 `createSelectorQuery` API 来实现。 首先,在需要滚动到的元素上设置一个 `id`,例如: ```html <scroll-view scroll-y="{{true}}" scroll-into-view="{{currentId}}" style="height: 300px;"> <view id="item1">第1个元素</view> <view id="item2">第2个元素</view> <view id="item3">第3个元素</view> <view id="item4">第4个元素</view> <view id="item5">第5个元素</view> <view id="item6">第6个元素</view> <view id="item7">第7个元素</view> <view id="item8">第8个元素</view> </scroll-view> ``` 接下来,在 `Page` 中获取当前可视的元素: ```js // 获取 scroll-view 组件 const query = wx.createSelectorQuery() query.select('#scrollView').boundingClientRect() query.selectViewport().scrollOffset() query.exec(function(res) { const scrollViewRect = res[0] const scrollOffset = res[1].scrollTop const windowHeight = wx.getSystemInfoSync().windowHeight const scrollTop = scrollViewRect.top + scrollOffset const scrollBottom = scrollTop + windowHeight const items = [] // 获取可视区域内的元素 query.selectAll('.item').boundingClientRect() query.exec(function(res) { res[0].forEach(function(item) { if (item.top >= scrollTop && item.bottom <= scrollBottom) { items.push(item.dataset.id) } }) console.log('当前可视的元素:', items) }) }) ``` 这里使用 `createSelectorQuery` API 获取 `scroll-view` 组件的位置和滚动位置,然后计算出可视区域的上下边界。接着,再次使用 `createSelectorQuery` API 获取所有带有 `.item` 类的元素的位置信息。最后,根据元素的位置信息,判断哪些元素可视区域内,从而得到当前可视的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值