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 相关文章推荐
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
JavaScript使用yield模拟多线程的方法
Mar 19 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
jQuery实现的简单在线计算器功能
May 11 jQuery
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 Javascript
详解使用create-react-app快速构建React开发环境
May 16 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
Jun 29 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
Sep 10 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截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
AJAX架构之Dojo篇
2007/04/10 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python实现网站文件的全备份和差异备份
2014/11/30 Python
python实现挑选出来100以内的质数
2015/03/24 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python模拟登陆实现代码
2017/06/14 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
python plotly画柱状图代码实例
2019/12/13 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
个人求职信范文分享
2013/12/13 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
一份文言文检讨书
2014/09/13 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
2014年班组工作总结
2014/11/20 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript