我做了一些显示/隐藏功能。一次只能打开一个手风琴。我遇到的问题有时是当一个新的文本打开时,文本将下降一半。因此,它不会在手风琴开始时出现。我希望它滚动到打开的手风琴的顶部。

这是一个示例:http://jsfiddle.net/e6fpfa68/

<a class="showBtn">BUTTON</a>
<div class="hideme">
  <h1>HTML Ipsum Presents</h1>
</div>

<a class="showBtn">BUTTON 2</a>
<div class="hideme">
  <h1>HTML Ipsum Presents</h1>
</div>


jQuery的:

$('.showBtn').click(function() {
  //$('.hideme').hide();
  if ($(this).hasClass('active')) {
    $(this).removeClass('active');
    $('.hideme').slideUp();
  } else {
    $('.hideme').slideUp();
    $('.showBtn').removeClass('active');
    $(this).addClass('active');
    $(this).next().filter('.hideme').slideDown();
  }
});


我一直在尝试弄乱:

$('html, body').animate({scrollTop: scroll_to}, 2000);


但是它没有给出正确的结果(http://jsfiddle.net/e6fpfa68/2/)。

实现此功能的最佳方法是什么?

最佳答案

您在第二个小提琴中的方法非常好。使用jQuery.position()作为第二个动画的目标,但更重要的是,您必须在第一个动画完成后执行它,在它的回调中:

$('.showBtn').click(function() {
  if ($(this).hasClass('active')) {
    $(this).removeClass('active');
    $('.hideme').slideUp();
  } else {
    $('.hideme').slideUp();
    $('.showBtn').removeClass('active');
    $(this).addClass('active');
    $(this).next().filter('.hideme').slideDown(400, function() {
      $('html, body').animate({scrollTop: $(this).position().top}, 400);
    });
  }
});


http://jsfiddle.net/e6fpfa68/8/

10-07 20:38