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 学习笔记(onchange等)
Nov 14 Javascript
JavaScript自动设置IFrame高度的小例子
Jun 08 Javascript
js Date概念详细介绍
Nov 22 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
Jan 19 Javascript
理解JS事件循环
Jan 07 Javascript
jQuery过滤选择器用法示例
Sep 12 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
Nov 12 Javascript
如何基于viewport vm适配移动端页面
Nov 13 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
Jun 25 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 数组实例说明
2008/08/18 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
python监控文件并且发送告警邮件
2018/06/21 Python
python实现归并排序算法
2018/11/22 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
python实现视频压缩功能
2020/12/18 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
EJB的角色和三个对象
2015/12/31 面试题
思想汇报格式
2014/01/05 职场文书
运动会四百米广播稿
2014/01/19 职场文书
房地产广告词大全
2014/03/19 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
见习报告怎么写
2014/10/31 职场文书
公司表扬稿范文
2015/05/05 职场文书
Django框架中表单的用法
2022/06/10 Python