`

JavaScript目录菜单滚动反显组件的实现

 
阅读更多

http://www.cnblogs.com/snandy/p/4013137.html

 

JavaScript目录菜单滚动反显组件,有以下两个特点

  1. 每个导航菜单项(nav)对应页面一个内容区域(content)
  2. 滚动页面到特定内容区域(content)时,对应的菜单会自动切换,一般会添加一个高亮样式

这个功能可以很方便的提醒用户目前所浏览的位置,有时目录菜单还会设计为滚动时一直固定在指定位置

 

以下为此类功能的应用示例:

1. 京东团购首页左侧导航菜单

  

2. 京东图书详细页右侧图书目录导航

 

3. 京东团购品牌惠楼层分类菜单

 

实现思路:

吸顶灯类似,也是滚动在特定内容的时候去对特定的元素做样式处理。不同的是这里的每一个菜单项一一对应相应的内容区域。

  1. 给菜单和内容区域加特定的属性(data-xx),关联起对应关系 
  2. 记录所有内容(content)的位置信息(注意,需要在页面load后)
  3. 给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)
};

  

线上示例

分享到:
评论

相关推荐

    滚动的菜单可以实现菜单的来回滚动

    3. 前端框架实现:现代前端框架提供了丰富的组件库和指令系统,如React的`react-slick`,Vue的`vue-slick-carousel`,这些库封装了滚动逻辑,开发者只需简单配置即可创建滚动菜单。 二、滚动菜单的应用场景 滚动...

    菜单滚动

    【描述】:虽然描述部分为空,但我们可以推测“菜单滚动”可能涉及到如何通过编程实现动态滚动效果,以及可能与前端开发中的JavaScript、CSS或者HTML5相关。在实际应用中,菜单滚动可以通过监听用户的滚动事件,动态...

    Bootstrap顶部浮动导航菜单页面滚动显示隐藏.zip

    为了实现页面滚动时导航栏的隐藏和显示,我们需要使用Bootstrap的JavaScript插件,这部分代码通常位于`js`目录下的文件中。在Bootstrap 3中,这个功能可以通过添加`data-spy="affix"`属性到导航栏元素来实现。当页面...

    javascript 下拉菜单(各种各样的)

    8. 库和框架:有许多现成的JavaScript库和框架,如jQuery UI、Bootstrap、Materialize等,提供预设的下拉菜单组件,简化了开发工作,但同时也需要了解如何集成和定制这些组件。 总之,掌握JavaScript下拉菜单的实现...

    基于Vue的可滑动菜单栏

    "基于Vue的可滑动菜单栏"是一个专为移动端设计的组件,利用Vue.js框架的强大功能,实现了一个高效、流畅且易于定制的滑动菜单栏。Vue.js是一个轻量级的前端JavaScript框架,以其组件化、易学习和高可维护性受到...

    css+javascript 实现扇形导航动画效果

    这个项目通过CSS来布局和设计扇形导航的静态部分,然后利用JavaScript实现动画效果,使导航菜单在用户的操作下优雅地展开和收起。 首先,我们来看看CSS在这其中的作用。CSS(层叠样式表)主要负责网页元素的样式和...

    JavaScript树型菜单 dtree

    JavaScript树型菜单dtree是一种常见的前端交互元素,用于在网页中展示层次结构的数据,比如目录、组织架构或者分类。在Web开发中,它为用户提供了一种直观、易于导航的方式来探索和操作多级数据。以下是对这个主题的...

    微信小程序中的滑动页面隐藏和显示组件功能的实现代码

    总结来说,微信小程序中实现滑动页面隐藏和显示组件功能的关键在于,准确地监听页面滚动事件,根据滚动距离控制组件的显示状态,并通过CSS过渡动画使显示和隐藏过程更为平滑自然。这种交互方式对于改善用户体验,...

    javascript实现省市级联菜单

    本文将详细讲解如何使用JavaScript实现这样的功能,主要基于标题和描述中的内容,结合实际应用场景来深入探讨。 一、省市数据存储 在JavaScript中,我们可以使用二维数组来存储省市区级的数据结构。例如: ```...

    菜单滚动监听

    要实现菜单滚动监听,通常我们会使用JavaScript或者框架如React、Vue、Angular等提供的API。对于原生JavaScript,我们可以监听`window.onscroll`事件: ```javascript window.addEventListener('scroll', function...

    微信小程序商城分类菜单带滚动

    例如,`&lt;scroll-view&gt;`是微信小程序中用于实现滚动效果的基础组件。 3. **数据绑定**:在WXML和WXSS中,通过数据绑定将JavaScript中的数据与视图层进行关联。在分类菜单中,商品类别列表可以通过这种方式动态加载和...

    javascript实现的一些网页特效

    JavaScript可以监听滚动事件,结合CSS3动画实现平滑滚动效果。 11. **全屏背景视频** 全屏背景视频可增强网站视觉冲击力。JavaScript可以控制视频播放、暂停、音量等功能,同时确保在移动设备上节省资源。 12. **...

    svg实现的炫酷滚动菜单,随轨迹跟随

    SVG(Scalable Vector ...总之,SVG实现的炫酷滚动菜单通过结合SVG图形、轨迹跟随技术和模块化组件,提供了一种吸引用户的交互方式。理解这些知识点,并掌握其实现方法,对于提升网页或应用的用户体验具有重要意义。

    基于QT的侧边滑动菜单的实现

    实现侧边滑动菜单的关键在于理解QML中的Item、Rectangle、Column、Row、StackView等组件以及它们的交互。例如,我们可以使用Rectangle来创建一个菜单项,用Column或Row来组织菜单的布局,而StackView则可以帮助我们...

    含有滚动下拉菜单的导航条

    首先,滚动下拉菜单的基本结构通常由HTML和CSS构建,同时可能涉及到JavaScript或jQuery来实现动态效果。HTML用于创建菜单的基本结构,如`&lt;ul&gt;`和`&lt;li&gt;`元素,它们分别代表无序列表和列表项。CSS则用于定义样式,包括...

    vue使用better-scroll实现菜单列表左右联动

    例如,假设我们有 `menuScroll` 和 `contentScroll` 两个 Better-Scroll 实例,当菜单滚动时,我们可以更新内容列表的滚动位置: ```javascript &lt;!-- 菜单列表 --&gt; &lt;!-- 内容列表 --&gt; import BScroll...

    JS实现鼠标滚动自动隐藏顶部导航菜单特效源码.zip

    在给定的“JS实现鼠标滚动自动隐藏顶部导航菜单特效源码.zip”压缩包中,包含了一个用JavaScript编写的代码示例,该示例演示了如何在用户滚动页面时动态显示或隐藏顶部导航菜单。这种效果常见于许多现代网站设计中,...

    javascript几个网页特效

    在“javascript几个网页特效”这个主题中,我们可以深入探讨JavaScript实现的一些常见和有趣的网页特效。 1. **动画效果**:JavaScript可以创建各种动画,如淡入淡出、滑动、旋转等。例如,使用CSS3的transition和...

    javascript下拉菜单

    总的来说,理解 JavaScript 下拉菜单的原理和实现方法对于前端开发者来说非常重要,因为它们是网页交互设计的基础组件之一。通过熟练掌握这一技术,可以提升网页的用户体验,并为用户提供更直观、更丰富的导航方式。

    JSP项目中JAVASCRIPT 树形菜单

    5. **库与框架的支持**:许多前端库如jQuery、Vue.js、React等提供了构建树形菜单的插件或组件,使得实现更加简单,功能更加强大。例如,jQuery有jQuery UI的Treeview,React有react-treeview等。 6. **性能优化**...

Global site tag (gtag.js) - Google Analytics