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 相关文章推荐
js中将多个语句写成一个语句的两种方法小结
Dec 08 Javascript
Riot.js 快速的JavaScript单元测试框架
Nov 09 Javascript
js动态加载以及确定加载完成的代码
Jul 31 Javascript
javascript跨域的4种方法和原理详解
Apr 08 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
在 Node.js 中使用原生 ES 模块方法解析
Sep 19 Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 Javascript
vue webpack实用技巧总结
Apr 24 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 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颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
js实现数组转换成json
2015/06/26 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
python判断变量是否为列表的方法
2020/09/17 Python
python实现学生通讯录管理系统
2021/02/25 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
教育局长自荐信范文
2013/12/22 职场文书
新郎答谢词
2015/01/04 职场文书
欠条范文
2015/07/03 职场文书
2016新年问候语大全
2015/11/11 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS