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 相关文章推荐
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
js Dialog 实践分享
Oct 22 Javascript
js 时间格式与时间戳的相互转换示例代码
Dec 25 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
Bootstrap源码解读导航条(7)
Dec 23 Javascript
JavaScript创建对象的常用方式总结
Aug 10 Javascript
vue实现div拖拽互换位置
Jul 29 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
Dec 28 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
967 个函式
2006/10/09 PHP
php adodb介绍
2009/03/19 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
python的exec、eval使用分析
2017/12/11 Python
Python 复平面绘图实例
2019/11/21 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
一年级学生评语
2014/04/23 职场文书
清明节随笔
2015/08/15 职场文书
2016大学军训心得体会
2016/01/11 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis