jQuery 实现侧边浮动导航菜单效果


Posted in Javascript onDecember 26, 2014

单页面网页内容较多,页面长度较大,需要方便快速的在页面的不同位置进行定位,所以浮动菜单逐渐流行了起来,如下图 男装、女装、美妆等。

jQuery 实现侧边浮动导航菜单效果

这种菜单功能分为两部分:

1、点击菜单项,网页滚动到对应位置,可简单通过锚点实现;

2、滚动页面的时候,菜单项的选中状态要跟着改变,这就需要监听网页的滚动事件并通过一点计算来实现了;

jQuery 实现侧边浮动导航菜单效果

计算 scrollTop 和 各个 div 的 offsetTop 的大小关系,判断现在网页显示的位置在什么地方,再根据计算的结果给对应的菜单项添加样式。比如第二个 div 的 offset().top = 300, 第三个 div 的offset().top = 600,此时的 scrollTop = 400,说明现在显示的大部分是第二个 div 的位置,700 则是第三个 div。下面是一个简单的例子:

<div id="menu">

    <ul>

        <li><a href="#item1" class="current">1F 男装</a></li>

        <li><a href="#item2">2F 女装</a></li>

        <li><a href="#item3">3F 美妆</a></li>

        <li><a href="#item4">4F 数码</a></li>

        <li><a href="#item5">5F 母婴</a></li>

    </ul>

</div>

<div id="content">

    <h1>网购</h1>
    <div id="item1" class="item">

        <h2>1F 男装</h2>

        <ul>

            <li><a href="#"><img src="" alt=""/></a></li>

            <!-- 若干个li -->

        </ul>

    </div>

    <!-- 若干个item-->

</div>
* {margin: 0;padding: 0;}

        body {font-size: 12px;line-height: 1.7;}

        li {list-style: none;}

        #content {width: 800px;margin: 0 auto;padding: 20px;}

        #content h1 {color: #0088bb;}

        #content .item {padding: 20px;margin-bottom: 20px;border: 1px dotted #0088bb;}

        #content .item h2 {font-size: 16px;font-weight: bold;border-bottom: 2px solid #0088bb;margin-bottom: 10px;}

        #content .item li {display: inline;margin-right: 10px;}

        #content .item li a img {width: 230px;height: 230px;border: none;}

        #menu{position:fixed;left:50%;margin-left:400px;top:100px;}

        #menu ul li a {

            display: block;

            margin: 5px 0;

            font-size: 14px;

            font-weight: bold;

            color: #333;

            width: 80px;

            height: 50px;

            line-height: 50px;

            text-decoration: none;

            text-align: center;

        }

        #menu ul li a:hover,#menu ul li a.current {color: #fff;background: #0088bb;} 
$(function(){

           $(window).scroll(function(){

               var scrollTop = $(document).scrollTop();

               var contentItems = $("#content").find(".item");

               var currentItem = "";

               contentItems.each(function(){

                   var contentItem = $(this);

                   var offsetTop = contentItem.offset().top;

                   if(scrollTop > offsetTop-200){//此处的200视具体情况自行设定,因为如果不减去一个数值,在刚好滚动到一个div的边缘时,菜单的选中状态会出错,比如,页面刚好滚动到第一个div的底部的时候,页面已经显示出第二个div,而菜单中还是第一个选项处于选中状态

                       currentItem = "#" + contentItem.attr("id");

                   }                   

               });

               if(currentItem&¤tItem!=$("#menu").find(".current").attr("href")){

                   $("#menu").find(".current").removeClass("current");

                   $("#menu").find("[href=" + currentItem + "]").addClass("current");

               }

           });

       });
Javascript 相关文章推荐
让innerHTML的脚本也可以运行起来
Jul 01 Javascript
学习ExtJS(二) Button常用方法
Oct 07 Javascript
Javascript中replace()小结
Sep 30 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
js时间查询插件使用详解
Apr 07 Javascript
vue中如何使用ztree
Feb 06 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
Sep 30 Javascript
微信小程序常用赋值方法小结
Apr 30 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
生成无限制的微信小程序码的示例代码
Sep 20 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
JS实现简易留言板特效
Dec 23 Javascript
Javascript的闭包详解
Dec 26 #Javascript
jQuery中focus事件用法实例
Dec 26 #Javascript
生成二维码方法汇总
Dec 26 #Javascript
Javascript中的五种数据类型详解
Dec 26 #Javascript
javascript工厂方式定义对象
Dec 26 #Javascript
jQuery中click事件用法实例
Dec 26 #Javascript
javascript实现类似超链接的效果
Dec 26 #Javascript
You might like
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php文件下载处理方法分析
2015/04/22 PHP
php实现文件上传基本验证
2020/03/04 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
javascript生成大小写字母
2015/07/03 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
Python 自动刷博客浏览量实例代码
2017/06/14 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python如何保证输入键入数字的方法
2019/08/23 Python
python 公共方法汇总解析
2019/09/16 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
UNIX命令速查表
2012/03/10 面试题
大学自我评价
2014/02/12 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
励志演讲稿200字
2014/08/21 职场文书
东京审判观后感
2015/06/01 职场文书
大学运动会加油稿
2015/07/22 职场文书
简历自我评价范文
2019/04/24 职场文书