jQuery - 滚动到具有特定类

时间:2015-10-19 08:19:22

标签: jquery scrolltop

美好的一天! 我想要一个按钮,当你点击它时,窗口将滚动到具有特定类的元素。

我有这个片段。它滚动,但是当应该跳过下一个兄弟时,它不会滚动。

另外,如果可能的话。当它到达最后一个元素时,'当前'应该回到顶端。

请提前帮助我。



     $('#nextBtn').on('click', function(e) {
       e.preventDefault();
     
       if ($('#nextBtn') && $('.current').next('li.scroll').length > 0) {
           
           var $next = $('.current').next('.scroll');
           var top = $next.offset().top;
           
           $('.current').removeClass('current');
         
           $('body').animate({
             scrollTop: top     
           }, function () {
                  $next.addClass('current');
           });
         }
      
     });

#nextBtn {position:fixed;top:0;right:50px;text-align:right;}
li{color:white;background: #333;margin:10px 0;height:500px;list-style:none;padding:0}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="nextBtn">NEXT</button>

<li class="scroll current">Scroll here!</li>
<li class="scroll">Scroll here!</li>
<li class="scroll">Scroll here!</li>
<li class="not-scroll">DO NOT scroll here!</li>
<li class="not-scroll">DO NOT scroll here!</li>
<li class="scroll">Scroll here!</li>
<li class="scroll last">Scroll here!</li>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

.next()仅选择直接兄弟,然后检查它是否满足选择器,如果不匹配则不返回任何内容。它不会选择与选择器匹配的下一个兄弟。

一个简单的解决方案是找到与选择器匹配的所有下一个兄弟姐妹,然后像

那样选择第一个兄弟姐妹
var $next = $('.current').nextAll('.scroll').first();

$('#nextBtn').on('click', function(e) {
  e.preventDefault();
  var $current = $('.current'),
    $next = $current.nextAll('.scroll').first();
  if (!$next.length) {
    $next = $('.scroll').first();
  }

  if ($next.length) {


    var $next = $next.first();
    var top = $next.offset().top;

    $current.removeClass('current');

    $('body').animate({
      scrollTop: top
    }, function() {
      $next.addClass('current');
    });
  }

});
#nextBtn {
  position: fixed;
  top: 0;
  right: 50px;
  text-align: right;
}
li {
  color: white;
  background: #333;
  margin: 10px 0;
  height: 500px;
  list-style: none;
  padding: 0
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="nextBtn">NEXT</button>

<ul>
  <li class="scroll current">Scroll here 1!</li>
  <li class="scroll">Scroll here 2!</li>
  <li class="scroll">Scroll here 3!</li>
  <li class="not-scroll">DO NOT scroll here!</li>
  <li class="not-scroll">DO NOT scroll here!</li>
  <li class="scroll">Scroll here 4!</li>
  <li class="scroll last">Scroll here 5!</li>
</ul>