Javascript实现页面滚动时导航智能定位


Posted in Javascript onMay 06, 2017

常见的开发页面中可能会有这么一个需求,页面中会有多个模块,每个模块对应一个导航,当页面滚动到某个模块时,对应的模块导航需要加上一个类用于区分当前用户所浏览区域。

假设结构如下:

<div class="container">
  <div class="wrapper">
    <div class="section" id="section1">section1</div>
    <div class="section" id="section2">section2</div>
    <div class="section" id="section3">section3</div>
    <div class="section" id="section4">section4</div>
    <div class="section" id="section5">section5</div>
  </div>
  <nav>
    <a href="#section1" rel="external nofollow" class="current">section1</a>
    <a href="#section2" rel="external nofollow" >section2</a>
    <a href="#section3" rel="external nofollow" >section3</a>
    <a href="#section4" rel="external nofollow" >section4</a>
    <a href="#section5" rel="external nofollow" >section5</a>
  </nav>
</div>

页面滚动时导航定位

js代码如下:

var $navs = $('nav a'),          // 导航
  $sections = $('.section'),       // 模块
  $window = $(window),
  navLength = $navs.length - 1;
  
$window.on('scroll', function() {
  var scrollTop = $window.scrollTop(),
    len = navLength;

  for (; len > -1; len--) {
    var that = $sections.eq(len);
    if (scrollTop >= that.offset().top) {
       $navs.removeClass('current').eq(len).addClass('current');
       break;
    }
  }
});

效果如下:

Javascript实现页面滚动时导航智能定位

不难看出,基本原理就是在window滚动的时候,依次将模块从后向前遍历,如果window的滚动高度大于或等于当前模块的距页面顶部的距离,则将当前模块对应的导航突出显示,并且不再继续遍历

点击导航定位页面

除了这种需求外,还有另一种需求,就是点击导航定位到导航所对应模块的顶部。

代码如下:

$navs.on('click', function(e) {
  e.preventDefault();
  $('html, body').animate({
    'scrollTop': $($(this).attr('href')).offset().top
  }, 400);
});

效果如下:

Javascript实现页面滚动时导航智能定位

以上基本上满足了业务的基本需求,这是工作中总结的经验,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
jquery $(document).ready() 与window.onload的区别
Dec 28 Javascript
经典海量jQuery插件 大家可以收藏一下
Feb 07 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
Apr 18 Javascript
javascript如何创建对象
Aug 29 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 Javascript
原生js实现选项卡功能
Mar 08 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
JS字符串补全方法padStart()和padEnd()
May 27 Javascript
JavaScript实现优先级队列
Dec 06 Javascript
JavaScript实现打地鼠小游戏
Apr 23 #Javascript
简单实现jQuery弹幕效果
May 06 #jQuery
javascript编写简易计算器
May 06 #Javascript
JavaScript实现无穷滚动加载数据
May 06 #Javascript
Angularjs2不同组件间的通信实例代码
May 06 #Javascript
jquery实现提示语淡入效果
May 05 #jQuery
Jquery获取radio选中的值
May 05 #jQuery
You might like
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python如何实现视频转代码视频
2019/06/17 Python
详解python pandas 分组统计的方法
2019/07/30 Python
python获取Linux发行版名称
2019/08/30 Python
Python实现序列化及csv文件读取
2020/01/19 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
python能自学吗
2020/06/18 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
求职信怎么写范文
2014/05/26 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏