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学习笔记(二) js一些基本概念
Jun 18 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
javascript检测两个数组是否相似
May 19 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
详解webpack打包vue时提取css
May 26 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 Javascript
基于html+css+js实现简易计算器代码实例
Feb 28 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP之COOKIE支持详解
2010/09/20 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
多广告投放代码 推荐
2006/11/13 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
OpenCV实现人脸识别
2017/04/07 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
Python对excel的基本操作方法
2021/02/18 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
一年级家长会邀请函
2014/01/25 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android