JavaScript目录菜单滚动反显组件的实现
JavaScript目录菜单滚动反显组件,有以下两个特点
- 每个导航菜单项(nav)对应页面一个内容区域(content)
- 滚动页面到特定内容区域(content)时,对应的菜单会自动切换,一般会添加一个高亮样式
这个功能可以很方便的提醒用户目前所浏览的位置,有时目录菜单还会设计为滚动时一直固定在指定位置。
以下为此类功能的应用示例:
1. 京东团购首页左侧导航菜单
2. 京东图书详细页右侧图书目录导航
3. 京东团购品牌惠楼层分类菜单
实现思路:
和吸顶灯类似,也是滚动在特定内容的时候去对特定的元素做样式处理。不同的是这里的每一个菜单项一一对应相应的内容区域。
- 给菜单和内容区域加特定的属性(data-xx),关联起对应关系
- 记录所有内容(content)的位置信息(注意,需要在页面load后)
- 给window添加scroll事件,当滚动到指定内容时高亮显示对应的菜单项(因为是一一对应的,通过索引就可以找到对应菜单项)
如果使用了jQuery,通过插件方式实现不过50行代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /* * 导航/菜单高亮组件 * option * nav 导航/菜单选择器 * content 内容模块选择器 * diffTop 距离顶部的误差值 * diffBottom 距离底部的误差值 * lightCls 高亮的class * */ $.fn.navLight = function (option, callback) { option = option || {} var nav = option.nav || '[data-widget=nav]' var content = option.content || '[data-widget=content]' var diffTop = option.diffTop || 200 var diffBottom = option.diffBottom || 500 var lightCls = option.lightCls || 'curr' var $self = $( this ) var $nav = $self.find(nav) var $content = $self.find(content) // 记录每个分类的位置 var contentPosi = $content.map( function (idx, elem) { var $cont = $(elem) var top = $cont.offset().top var height = $cont.height() return { top: top-diffTop, bottom: top+diffBottom, jq: $cont } }) var $win = $(window) var $doc = $(document) var handler = $.throttle( function (e) { var dTop = $doc.scrollTop() highLight(dTop) }, 100) function highLight(docTop) { contentPosi.each( function (idx, posi) { if (posi.top < docTop && posi.bottom > docTop) { $nav.removeClass(lightCls) $nav.eq(idx).addClass(lightCls) if (callback) { callback($nav, $content) } } }) } $win.scroll(handler) }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2011-10-10 直接插入排序