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

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

假设结构如下:

<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" class="current">section1</a>
        <a href="#section2">section2</a>
        <a href="#section3">section3</a>
        <a href="#section4">section4</a>
        <a href="#section5">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;
        }
    }
});

效果如下:

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

点击导航定位页面

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

代码如下:

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

效果如下:

以上基本上满足了业务的基本需求,这是工作中总结的经验,仅供参考,有错误请指出,谢谢!

原文地址:https://www.cnblogs.com/baimeishaoxia/p/12502875.html

时间: 2024-12-28 17:20:13

Javascript页面滚动时导航智能定位的相关文章

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

遇到的问题: 在做官网的时候,需要滚动定位的区块的图片不确定,无法确定用户浏览区域对应的模块导航 之前的解决方案是: 通过定位滚动条的位置来判断用户浏览区域对应的模块导航,这种方法的弊端是,区块的高度不确定时就无法计算滚动条的位置来判断: 优化方案: 页面中会有多个模块,每个模块对应一个导航,当页面滚动到某个模块时,对应的模块导航需要加上一个类用于区分当前用户所浏览区域. 以下是DEMO <!-- html --><div class="container">

JS-JQ实现页面滚动时元素智能定位(顶部-其他部位)

  阅读前提:充分理解div的三种定位方式:浮动,相对定位,绝对定位 方法一(顶部)      原理:直接使用css 进行控制:缺点:不兼容ie6-:      实现:position:fixed; top:0 方法二(顶部)      原理:获取页面被卷曲的高度(LEN),复制给 obj.STYLE.TOP=LEN,缺点,效果不是很流畅!      实现:      var len=document.documentElement.scrollTop||document.body.scroll

js页面滚动时层智能浮动定位实现:

案例展示: 第一个:每个人都有看过的淘宝页面: 案例就不多说了,有兴趣的可以多去找找, 这样的智能浮动效果还是不错的,挺方便. 基本的实现原理: 首先有一个默认状态就是没有滚动的时候,什么事情也不用做,定位可以是absolute,也可以是stati,fixed,relartive 这些都可以.我们主要需要关注的是当浏览器滚动的时候,(要浮动的块)要移除浏览器界面视区的时候,修改其position属性,让其浮动在窗口的上沿显示就可以了.最好的position属性就是fixed了,可以在IE6+和其

js页面滚动浮动层智能定位(jQuery)实现

///js页面滚动浮动层智能定位(jQuery)实现 ///调用:$("#popfloat").smartFloat($("#mainInfo").width() + 21); $.fn.smartFloat = function(width_p) { var position = function(element) { var top = element.position().top, pos = element.css("position")

jQuery实现页面滚动时智能浮动定位

<!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>jQuery实现页面滚动时层智能浮动定位_前端开发</title>    <style type="text/css">        * { 

页面滚动时出现固定导航

页面滚动时出现固定导航的效果,参考页面有http://v.thea.cn/course/info_358和v.thea.cn. 参考代码如下: <div class="tab-title" style="position: static; top: 0px;"><span class="normal selected">课程介绍</span><span class="normal"&g

WOW.js和animate.css让页面滚动时显示动画

官网:http://mynameismatthieu.com/WOW/ bootstrap CDN服务:http://www.bootcdn.cn/wow/ 1.wow.js 实现了在网页滚动时的动画效果,有漂亮的动画效果,依赖于Animate.css. 2.Animate.css (下载https://daneden.github.io/animate.css/)非常优秀的CSS3动画库,不依赖于jQuery,纯CSS动画 使用方法 1.引入文件<link rel="stylesheet

基于jQuery实现页面滚动时顶部导航显示隐藏效果

<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> <link rel=&quo

javascript页面滚动图片加载

图片量越来越大,网页加载不堪重负.还是得用lazyload... 实现要点:页面绑定滚动事件:加载页面的时候把地址放于一个属性中:在滚动过程中判断元素是否进入显示的区域内:加载图片. 主要相关问题:浏览器兼容,如获取浏览器可见部分的宽度: window.innerHeight || document.documentElement.clientHeight 获得页面相对可见部分的左上角的竖直方向的坐标: window.pageYOffset || window.document.document