[前端] 滚动监听导航效果

一、依赖:引用jQuery框架

二、要点:$(window).scroll(function() { // 判断$(this).scrollTop()的滚动高度是否大于某个div的距顶高度 });

三、代码:

 

<!DOCTYPE HTML>
<html>
 <head>
  <title>导航定位</title>
  <meta charset="utf-8">
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">

  <script src="jquery.min.js"></script>
 </head>

   <style type="text/css">
      * {
         margin:0px;
         padding:0px;
         font-family:'微软雅黑';
      }
      div {
         height:400px;
         border:1px solid red;
         width:600px;
      }
      ul {
         overflow:hidden;
         position:fixed;
         top:300px;
         left:650px;
      }
      li {
         width:40px;
         height:40px;
         background:#3F883E;
         text-align:center;
         line-height:40px;
         color:#fff;
         ,font-size:18px;
         cursor:pointer;
         border-bottom:1px solid #fff;
      }
      li.active {
         width: 38px;
         height: 38px;
         margin-bottom: 1px;
         border: 1px solid #3F883E;
         background: #fff;
         color: #666;
      }
   </style>

 <body>

   <div class="div1">段落1</div>

   <div class="div2">段落2</div>

   <div class="div3">段落3</div>

   <div class="div4">段落4</div>

   <div class="div5">段落5</div>

   <div class="div6">段落6</div>

   <div class="div7">段落7</div>

   <ul>
      <li class="li1 active">1</li>
      <li class="li2">2</li>
      <li class="li3">3</li>
      <li class="li4">4</li>
      <li class="li5">5</li>
      <li class="li6">6</li>
      <li class="li7">7</li>
   </ul>
   
   <script type="text/javascript">

   /* 滚动监听 */
      // 定义一个获取所有div的距离高度
      var arrOffsetTop = [
         $('.div1').offset().top,
         $('.div2').offset().top,
         $('.div3').offset().top,
         $('.div4').offset().top,
         $('.div5').offset().top,
         $('.div6').offset().top,
         $('.div7').offset().top
      ];

      // 获取每个div的平均高度
      var fTotalHgt = 0;
      for(var i=0; i<$('div').length; i++) {
         fTotalHgt += $('div').eq(i).outerHeight();
      }
      var fAverageHgt = parseFloat(fTotalHgt / $('div').length);

      // 滚动事件(每次滚动都做一次循环判断)
      $(window).scroll(function() {
         for(var i=0; i<$('div').length; i++) {
            if($(this).scrollTop() > arrOffsetTop[i] - fAverageHgt) {  // 减去一个固定值,是定位准确点
               $('ul li').eq(i).addClass('active').siblings().removeClass('active');
            }
         }
      });

   /* 点击事件 */
      $('ul li').click(function() {
         $(this).addClass('active').siblings().removeClass('active');
         $('body, html').animate({scrollTop: arrOffsetTop[$(this).index()]}, 500);
      });
   </script>

 </body>
</html>

四、效果图:

 

总结:

这是一个滚动监听事件效果,附加一个点击监听,仅供参考,复制可用

如果疑问,敬请留言,以便解决。

欢迎关注技术开发分享录:http://fenxianglu.cn/

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值