当前位置: 首页 > news >正文

微信小程序检测滚动到某元素位置的计算方法

wxml

<!-- 这里我希望滚到9的底部的时候,也就是刚好划过9的时候出现一个按钮就是回到顶部的 -->
<view id="targetView">
    <view class="item" wx:for="{{arr}}" wx:key="index" style="width: 100%;height: 200rpx;margin-top: 20rpx;background-color: pink;">
        {{item}}
    </view>
</view>

<view wx:if="{{btnShow}}" bind:tap="scrollTargetViewInfo" style="position: fixed;bottom: 200rpx;right: 50rpx;background-color: blue;border-radius: 20rpx;padding:5rpx 20rpx;color: #ffffff;">回到顶部</view>

js

Page({
    data: {
        arr: ['111', '222', '333', '444', '555', '666', '777', '888', '999', '101010', '111111', '121212', '131313', '141414'],
        btnShow: false, // 是否显示btn
        targetViewHeight: 0 // 目标 view 的高度
    },

    onLoad() {
        this.getTargetViewInfo();
    },

    // 获取目标 view 的位置和高度
    getTargetViewInfo() {
        const query = wx.createSelectorQuery();
        query.selectAll('.item').boundingClientRect((rect) => {
            if (rect[8]) {
                // 目标元素的上距离和自身高度减去一屏高度(因为滚动元素监听到的是滚出屏幕外的尺寸,因此这里要减去一屏)
                this.setData({
                    targetViewHeight: rect[8].top + rect[8].height - wx.getSystemInfoSync().windowHeight // 目标 view 的高度
                });
            }
        }).exec();
    },

    // 监听页面滚动事件
    onPageScroll(event) {
        const {
            scrollTop
        } = event;
        console.log('this.data.targetViewTop',this.data.targetViewHeight,scrollTop)
        // 判断是否滚动到目标 view 的底部
        if (scrollTop >= this.data.targetViewHeight) {
            this.setData({
                btnShow: true // 显示按钮
            });
        } else {
            this.setData({
                btnShow: false // 隐藏按钮
            });
        }
    },
    // 回到顶部
    scrollTargetViewInfo() {
        wx.pageScrollTo({
            scrollTop: 0, // 滚动到页面顶部
            duration: 300 // 滚动动画的时长,单位为 ms
        });
    }
});

相关文章:

  • 34、在 deque中使用 [] 操作符和 at() 方法有何区别?
  • 深度强化学习中的深度神经网络优化策略:挑战与解决方案
  • JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础实战
  • 以mysql 为例, 在cmd 命令行连接数据,操作数据库,关闭数据库的详细步骤
  • java string 类型转list实体类且忽略实体类中没有的字段
  • 城市更新浪潮下的破局之道:中建海龙模块化集成建筑技术的新应用
  • 数智读书笔记系列021《大数据医疗》:探索医疗行业的智能变革
  • 接收与发送ipv6数据包
  • 北斗设备启动流程与时长解析
  • W80x使用WM IoT SDK 2.X 开发(二)驱动tft屏幕
  • JavaScript |(六)DOM事件 | 尚硅谷JavaScript基础实战
  • JVM 学习前置知识
  • 2025年渗透测试面试题总结-某四字大厂实习面试复盘 一面 二面 三面(题目+回答)
  • 【赵渝强老师】达梦数据库MPP集群的架构
  • Rust练手项目第一章
  • STM32 SPI总线驱动CH376T实现U盘/TF卡读写全解析—CH376数据手册分析(中上) | 零基础入门STM32第七十三步
  • XXE漏洞
  • Ollama详解,无网环境导入运行本地下载的大模型,无网环境pycharm插件大模型调用(更新中)
  • 招聘面试季--一文顿悟,Java中字节流和字符流的区别及使用场景上的差异
  • Linux安装go环境
  • 在美国,为什么夏季出生的孩子更容易得流感?
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 关税互降后的外贸企业:之前暂停的订单加紧发货,后续订单考验沟通谈判能力
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • 中国至越南河内国际道路运输线路正式开通
  • 美国4月CPI同比上涨2.3%低于预期,为2021年2月来最小涨幅