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 相关文章推荐
JavaScript-世界上误解最深的语言分析
Aug 12 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
js编写的treeview使用方法
Nov 11 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
vue实现弹幕功能
Oct 25 Javascript
小程序实现投票进度条
Nov 20 Javascript
Vue+element+cookie记住密码功能的简单实现方法
Sep 20 Javascript
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
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分页显示制作详细讲解
2006/10/09 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
php工具型代码之印章抠图
2018/07/18 PHP
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript基本语法
2016/05/31 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python入门教程之运算符与控制流
2016/08/17 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python读取Excel表格文件的方法
2019/09/02 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
应届大学生自荐书
2014/06/17 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python