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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
JS启动应用程序的一个简单例子
May 11 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
jQuery实现微信长按识别二维码功能
Aug 26 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
VSCode配置react开发环境的步骤
Dec 27 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
微信小程序实现列表左右滑动
Nov 19 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 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
php stripslashes和addslashes的区别
2014/02/03 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP 正则表达式小结
2015/02/12 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
javascript event 事件解析
2011/01/31 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python装饰器decorator用法实例
2014/11/10 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
通过python检测字符串的字母
2020/02/18 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
好的演讲稿开场白
2013/12/30 职场文书
任命书范本大全
2014/06/06 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript