`

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)
};

  

线上示例

分享到:
评论

相关推荐

    基于Vue的可滑动菜单栏

    基于Vue的移动端可滑动菜单栏

    react-horizontal-scrolling-menu:React的水平滚动菜单组件

    这是React的水平滚动菜单组件。 菜单组件具有自适应宽度,只需为父容器设置宽度。 项目宽度将根据CSS样式确定。 注意:我没有太多时间获得项目支持。 任何帮助表示赞赏。 对于导航,您可以使用箭头,鼠标滚轮或仅...

    JavaScript网页特效范例宝典源码

    实例043 应用JavaScript实现指定尺寸无边框无滚动条窗口 67 1.8 水平导航条应用 69 实例044 图片按钮导航条 69 实例045 导航条的动画效果 71 实例046 不用图片实现质感导航条 72 1.9 下拉菜单式导航条 73 实例047 二...

    js+CSS实现模拟华丽的select控件下拉菜单效果

    主要介绍了js+CSS模拟select控件下拉菜单效果,通过javascript鼠标事件结合css控制实现select下拉菜单效果,整体效果华丽美观,需要的朋友可以参考下

    ASP.NET开发实战1200例(第Ⅰ卷)第十二章

    实例305 利用JavaScript实现窗口自动滚动 482 12.3 JavaScript对时间、XML文档和 多媒体的操作 483 实例306 利用JavaScript实现在线考试倒计时 483 实例307 在考试页的状态栏中显示JavaScript 数字时钟 484 实例308 ...

    javascript网页特效实例大全

    目录 -------------------------------------------------------------------------------- 第1章 javascript概述 1 1.1 什么是脚本语言 2 1.2 javascript简介 2 1.3 javascript与java的关系 3 1.4 javascript...

    Android UI组件实例集合

    是 Android 上实现类似 Facebook 和 Path 2.0 滑动式菜单的组件。 12、AsyncImageView 是 Android 上的一个异步从网络上获取图片并进行浏览的开源组件,可自动在本地进行缓存。该项目是 GreenDroid 的一部分。 13...

    react-scroll-sync:跨多个可滚动元素的同步滚动位置

    React滚动同步 跨多个可滚动元素的同步滚动位置 演示 文档和示例 执照 麻省理工学院 安装 npm install --save react-scroll-sync 用法 import React , { Component } from 'react' ; import { ScrollSync , ...

    howdyjs:一个包含Javascript插件,Vue3组件,Vue3指令的工具库

    一个包含Javascript插件,Vue3组件,Vue3指令的轻量工具组件库javascript插件或工具的个人组件包 当前该仓库已使用Vue3 + Typescript ,基于Vue2组件的旧版项目请前往查看。 关联 组件 :sparkles:通过拖拽更改...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    23.jQuery实现slider图片滚动,单个滚动,成组滚动示例 24.jQuery实现产品图片循坏旋转的代码 25.jQuery实现动态图文分组排序切换源码 26.jQuery实现图片3D旋转特效插件 v1.1版本下载 27.jQuery实现图片3D...

    ezj 国产的JavaScript框架,含常用网页控件 详情页

    一款JavaScript 框架:它对脑力记忆要求更低,应用更轻松;它集成了特效、控件,可以一句代码就实现常见...它包含JS日历组件、下拉菜单、图像渐显效果、cookie应用、文本编辑器、滚动条、Tab、遮罩等常用网页特效组件。

    react-menus:为 React 精心打造的菜单组件

    React菜单精心制作的 React 菜单安装$ npm install react-menus --save描述react-menus组件是一个类似于 React 小部件的上下文菜单。 它具有智能定位、过多菜单项上的溢出滚动和智能子菜单定位。变更日志查看路线图...

    通用UI控件的可访问,轻量,无样式的实现。-JavaScript开发

    包含元素常见UI控件的可访问,轻量,无样式的实现。 演示基本的交互式UI模式,例如弹出菜单,工具...另一方面,滚动自己的组件感觉就像是在重新发明轮子,并使可访问性受到威胁。 包含元素以以下形式提供这些基本行为

    ezj 国产的JavaScript框架,含常用网页控件

    它包含JS日历组件、下拉菜单、图像渐显效果、cookie应用、文本编辑器、滚动条、Tab、遮罩等常用网页特效组件。  我承认,jQuery 是优秀的,特别是基于 jQuery 的特效、控件非常之多,为 jQuery 增色不少。

    Tcl_TK编程权威指南pdf

    滚动条组件 第31章 输入条组件 使用输入条组件 输入条组件 第32章 列表框组件 使用列表框组件 列表框组件的编联 列表框组件的属性 第33章 文本组件 文本索引 文本标记 文本标签 文本信息的选择( ...

    wt-ui:一组构建为 AngularJS 指令的可重用 UI 组件

    用户界面 一组构建为 AngularJS 指令和服务的可重用 UI 组件,包括: ...无限滚动组件。 - 智能寻呼机 带有预缓存系统的寻呼机组件。 - 滑动菜单 可滑动菜单。 - 吐司 用于显示应用程序消息的 UI 组件。

    flex3的cookbook书籍完整版dpf(包含目录)

    flex3的cookbook书籍完整版dpf(包含目录),目录是我花了两个多小时自己整理的,希望对大家有帮助。 目录: 第一章.Flex与ActionScript基础(3) 1.1节.用FlexBuilder创建Flex项目 1.2节.用FlexBuilder创建Flex库项目 ...

    web前端项目-影视网站开发.zip

    在本程序中使用JavaScript脚本技术实现了导航菜单设计,电影图片不间断滚动效果设计等;本程序所运用到的AJAX无刷新技术,有效避免了我们在浏览网页时长时间打不开网页的情况发生;在index主程序页面中,使用了...

Global site tag (gtag.js) - Google Analytics