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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
jquery 图片轮换效果
Jul 29 Javascript
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
Sep 04 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
微信小程序实现bindtap等事件传参
Apr 08 Javascript
Vue开发之watch监听数组、对象、变量操作分析
Apr 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开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
Pycharm安装python库的方法
2020/11/24 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
长安大学毕业生自我鉴定
2014/01/17 职场文书
亲属关系公证书
2014/04/08 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
高中生逃课检讨书
2014/10/10 职场文书
销售员岗位职责
2015/02/10 职场文书
如何撰写促销方案?
2019/07/05 职场文书
详解Python类和对象内容
2021/06/22 Python
python​格式化字符串
2022/04/20 Python