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

uni-app - - - - - 实现锚点定位和滚动监听功能(滚动监听功能暂未添加,待后续更新)

实现锚点定位和滚动监听功能

  • 1. 思路解析
  • 2. 代码示例

效果截图示例:

  • 点击左侧menu,右侧列表数据实现锚点定位
    在这里插入图片描述

1. 思路解析

  • 点击左侧按钮,更新右侧scroll-view对应的scroll-into-view的值,即可实现右侧锚点定位
  • 滚动右侧区域,计算右侧滚动距离 动态更新左侧scroll-view对应的scroll-into-view的值,即可实现左侧锚点定位(暂无需求,先提供思路)

【scroll-view官网】

2. 代码示例

HTML


<view><!-- 左侧menu --><scroll-view scroll-y="true" :scroll-into-view="category.categoryMenuIntoView"scroll-with-animation="true"><view :id='"category-menu-" + index' v-for="(item, index) in category.coffeeList" :key="item.categoryId" @click="switchCategoryMenu(item,index)">{{ item.categoryName }}		</view></scroll-view><!-- 右侧列表 --><scroll-view scroll-y="true" :scroll-into-view="category.coffeeIntoView" scroll-with-animation="true"><view :id='"category-coffee-" + index' @scroll='coffeeScroll'>{{item.name}}</view></scroll-view></view>

重点:

  • scroll-into-view:值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
  • id设置:唯一值切不能为数字开头(后续需该值赋给scroll-into-view

JS

// 定义数据
const category = reactive({idx: 0,coffeeList: [],categoryMenuIntoView: 'category-menu-0',coffeeIntoView: 'category-coffee-0'})/*** 点击切换左侧menu*/
const switchCategoryMenu = (item, index) => {if (category.idx == index) return console.log('点击即为当前选中分类,无需切换逻辑')category.idx = indexcategory.categoryMenuIntoView = `category-menu-${index}`category.coffeeIntoView = `category-coffee-${index}`
}/***  onLoad之后执行,预先计算出右侧锚点卡片的范围*/
const getDistanceToTop = () => {distanceList.value = []; // 清空旧的距离列表const selectorQuery = uni.createSelectorQuery();selectorQuery.selectAll('.coffee-box').boundingClientRect(rects => {console.log('rects.map(rect => rect.top)', rects.map(rect => rect.top))distanceList.value = rects.map(rect => rect.top); // 直接映射为 `top` 值}).exec();
}/***  节流监听右侧区域滚动,联动左侧menu锚点定位*  根据滚动出的距离,属于getDistanceToTop对应的哪一个范围,动态修改左侧scroll-into-view的值即可*/
const coffeeScroll = throttle((event) => {let scrollTop = event.detail.scrollTop;
}, 200); // 节流时间 300ms


如此即可实现锚点定位功能。(滚动监听功能后续可能会更新)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 后端Java-SpringBoot整合MyBatisPlus步骤(超详细)
  • ubuntu下载安装部署docker,ubuntu下载最新的docker
  • vue3.0 + element plus 全局自定义指令:select滚动分页
  • 第一弹:llama.cpp编译
  • 4.5 了解大数据处理基本流程
  • EP33 评分接口和已评分状态
  • 2、.Net 前端框架:Blazor - .Net宣传系列文章
  • Rainbond 助力城建智控,从传统开发到敏捷开发转型
  • memset函数
  • 【CSS】背景
  • 【C++】C++17中可以存储任意类型数据的对象——any类的使用与设计思想
  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • C++中vector类的使用
  • Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器
  • 极狐GitLab 重要安全版本:17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10
  • Android框架之Volley
  • C# 免费离线人脸识别 2.0 Demo
  • CSS实用技巧干货
  • HashMap剖析之内部结构
  • Java,console输出实时的转向GUI textbox
  • java中具有继承关系的类及其对象初始化顺序
  • jdbc就是这么简单
  • jquery ajax学习笔记
  • js递归,无限分级树形折叠菜单
  • SQLServer之索引简介
  • VUE es6技巧写法(持续更新中~~~)
  • VuePress 静态网站生成
  • vuex 学习笔记 01
  • Vultr 教程目录
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 缓存与缓冲
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 为视图添加丝滑的水波纹
  • #APPINVENTOR学习记录
  • (4.10~4.16)
  • (C语言)共用体union的用法举例
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (笔记自用)LeetCode:快乐数
  • (笔试题)分解质因式
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)opengl函数加载和错误处理
  • (四)事件系统
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Unity3DUnity3D在android下调试
  • (转)大型网站架构演变和知识体系
  • .Net Core 中间件与过滤器
  • .net core使用ef 6
  • .Net IOC框架入门之一 Unity
  • .net web项目 调用webService
  • .Net 高效开发之不可错过的实用工具
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • @Validated和@Valid校验参数区别