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

吸顶交互逻辑全解析

页面加载 ↓ getRecommendPosition() 获取 recommendTop // 需要吸顶区域 ↓ 用户滚动页面 ↓ handlePageScroll(scrollTop) ↓ ┌─ isFixed true? ─┐ │ ↓ │ │ ┌─是─┐ ┌─否─┐ │ │ │ │ │ │ │ │ ↓ │ ↓ │ │ │ scrollTop │ scrollTop │ │ recommendTop-50? │ recommendTop? │ │ ↓ │ ↓ │ │ 解吸顶 │ 吸顶 │ │ ↓ │ ↓ │ │ return │ isFixedtrue │ │ │ ↓ │ │ │ return │ │ │ │ └─────────┴───────────┘逻辑梳理一、初始化阶段页面加载时通过uni.createSelectorQuery获取分类导航元素#recommend-section距离视口顶部的距离保存到recommendTop变量中。这个值表示分类导航在页面自然状态下的位置1. 数据定义 (data) // 分类导航吸顶相关 isFixed: false, // 是否固定定位控制是否吸顶 recommendTop: 0, // 分类导航距离顶部的距离 2. 初始化位置 (onLoad) // 获取分类导航距离顶部的距离用于吸顶效果 this.$nextTick(() { this.getRecommendPosition(); }); 3. 获取位置信息 (getRecommendPosition) getRecommendPosition() { // 使用 uni.createSelectorQuery() 获取 #recommend-section 元素距离视口顶部的距离存入 recommendTop。 const query uni.createSelectorQuery().in(this); query .select(#recommend-section) .boundingClientRect((data) { if (data) { this.recommendTop data.top; // 获取元素距离视口顶部的距离 } }) .exec(); },二、吸顶条件当页面滚动时比较当前滚动距离scrollTop与recommendTop的大小。只要scrollTop recommendTop就将isFixed设为true分类导航固定在搜索栏下方4. 滚动监听 (onPageScroll → handlePageScroll) onPageScroll(e) { this.handlePageScroll(e.scrollTop); }, handlePageScroll(scrollTop) { // 如果已经吸顶 if (this.isFixed) { // 当滚动回顶部小于吸顶阈值时解除吸顶 if (scrollTop this.recommendTop - 50) { this.isFixed false; } return; } // 如果还未吸顶检查是否需要吸顶 if (!this.recommendTop) return; // 当滚动距离大于等于分类导航的初始位置时吸顶 if (scrollTop this.recommendTop) { this.isFixed true; } }, 核心逻辑 吸顶条件scrollTop recommendTop 解除条件scrollTop recommendTop - 50向上滚动50px以上才解除三、保持吸顶一旦isFixed变为true滚动监听函数会直接返回不再判断是否需要吸顶或解除吸顶。这样做的目的是防止页面内容变化如切换分类清空列表导致页面回弹时吸顶状态被意外取消。四、解除吸顶当吸顶状态已激活时只有用户向上滚动使scrollTop recommendTop - 50时才将isFixed设为false。预留 50px 的缓冲距离避免频繁切换。五、切换分类点击分类时清空当前列表并加载新数据。如果之前处于吸顶状态切换完成后会重新获取分类导航的位置确保吸顶位置准确。由于吸顶后直接返回列表清空引起的页面回弹不会影响吸顶状态。// 切换分类处理 (goCategory) goCategory(item) { const wasFixed this.isFixed; // 保存吸顶状态 this.currentCategoryId item.id; this.categoryPage 0; this.categoryHasMore true; this.categoryInfoList []; // 清空列表会导致页面回弹 this.loadCategoryData(); // 如果之前是吸顶状态切换分类后重新检查 if (wasFixed) { this.$nextTick(() { this.getRecommendPosition(); }); } }, 问题清空 categoryInfoList 会导致页面内容减少触发页面回弹。但由于吸顶后直接 return所以不会影响 isFixed。六、样式切换通过isFixed控制类名recommend-fixed使分类导航从正常文档流切换为position: fixed并设置合适的top值固定在搜索栏下方。view idrecommend-section classrecommend-section :class{ recommend-fixed: isFixed } .recommend-section.recommend-fixed { position: fixed; top: calc(72rpx 40rpx); // 固定在搜索栏下方 left: 0; right: 0; z-index: 199; margin: 0; padding: 16rpx 18rpx; background: #fffbf5; box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.08); }
http://www.gsyq.cn/news/1327746.html

相关文章:

  • 伸缩门选型技术全解析:从耐用性到场景适配 - 奔跑123
  • 扎根苏州工业园区,我们是这样帮企业“合规长大”的 - 速递信息
  • 复旦微FM33单片机GPIO入门:从点灯到按键,用FL库实现你的第一个嵌入式程序
  • 数据结构笔记4
  • 2026年GEO优化服务商核心能力评估:五家头部机构技术与服务全景分析 - 产业观察网
  • 2026国产高端EDA工具推荐:国产EDA自主可控 - 品牌2025
  • 蓝桥杯嵌入式省赛串口通信实战:用STM32G431RBT6和CubeMX搞定数据收发与LCD显示
  • CentOS 7下VNC连接Sentaurus TCAD服务器,从安装到排错的保姆级避坑指南
  • 华硕笔记本终极控制指南:如何用轻量级工具G-Helper替代臃肿的Armoury Crate
  • SB-1T
  • 保姆级教程:用ENVI+单窗算法反演Landsat8地表温度(附完整BandMath公式)
  • 终极AMD Ryzen调试指南:免费开源硬件调优神器SMUDebugTool完全解析
  • 2026年AI排名优化公司品牌排行榜:专为企业品牌方甄选 - 华Sir1
  • R3nzSkin国服特供版:免费体验英雄联盟全皮肤终极指南
  • D3KeyHelper:暗黑3玩家的终极自动化助手,告别重复操作的完整指南
  • 华为MetaERP 官方切换公告、IFS 财经变革权威资料、孟晚舟公开讲话,逐条核对
  • 撕开长文本处理的“黑盒”:深度解密 MemoRAG 全局记忆架构(The Web Conf 2025 顶会剖析)
  • 如何通过3步优化解决游戏按键冲突:SOCD Cleaner快速入门指南
  • Air001实战指南:利用Arduino生态快速构建智能硬件原型
  • 边缘计算与机器视觉融合:工业质检智能化方案设计与实战解析
  • SEO老鸟私藏技巧:用Google搜索命令“免费”做竞品分析和内容审计
  • 跨平台资源下载神器:如何突破平台限制轻松获取网络内容?
  • 实测 2026 福州黄金回收前五强,收的顶成 “闭眼选不踩坑” 门店 - 奢侈品回收测评
  • 放射科医生怎么看AI生成的血管图?深入聊聊CTA-GAN在临床诊断中的真实效用与局限性
  • 气象科研效率翻倍:我是如何用Python脚本+IDM搞定ERA5-Land海量数据下载的
  • 大模型资源占用分析
  • 华为全球七大财务共享中心(SSC)详细介绍
  • 别再只会拖控件了!C# WinForm窗体背景图加载的5种姿势,从入门到精通(附完整代码)
  • 手把手教你用ADAU1452开发板复现ADI官方ANC降噪Demo(附分贝仪实测数据)
  • Escrcpy终极指南:3步实现Android设备图形化控制