2

У меня небольшие проблемы с аккордеоном Bootstrap 3.Bootstrap 3 collapse scrollTop

Что я хочу сделать, это добавить класс к переключателю аккордеона, а затем прокрутить/перейти к новому добавленному классу. Добавление/удаление класса отлично работает, и я решил, что просто добавлю scrollTop в том же блоке ... но такой удачи нет. Что мне не хватает?

Вот как это установить:

ссылки на панели:

<ul> 
    <li><a data-toggle="collapse" data-parent="#accordion" href="#panel1">Panel1</a> 
    </li> 
    <li><a data-toggle="collapse" data-parent="#accordion" href="#panel2">Panel2</a> 
    </li> 
    <li> 
     <a data-toggle="collapse" data-parent="#accordion" href="#panel3" ">Panel3</a></li> 
</ul> 

панели:

<div class="panel-group" id="accordion"> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h4 class="panel-title"> 
    <a class="accordion-toggle aWeight active" data-toggle="collapse" data-parent="#accordion" href="#panel1"> 
    Panel 1 
    </a> 
    </h4> 

     </div> 
     <div id="panel1" class="panel-collapse collapse in"> 
      <div class="panel-body">Anim pariatur...</div> 
     </div> 
    </div> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h4 class="panel-title"> 
    <a class="accordion-toggle aFitness" data-toggle="collapse" data-parent="#accordion" href="#panel2"> 
    Panel 2 
    </a> 
    </h4> 

     </div> 
     <div id="panel2" class="panel-collapse collapse"> 
      <div class="panel-body">Anim pariatur...</div> 
     </div> 
    </div> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h4 class="panel-title"> 
    <a class="accordion-toggle aFitness" data-toggle="collapse" data-parent="#accordion" href="#panel3"> 
    Panel 3 
    </a> 
    </h4> 

     </div> 
     <div id="panel3" class="panel-collapse collapse"> 
      <div class="panel-body">Anim pariatur...</div> 
     </div> 
    </div> 
</div> 

и, наконец, я использую этот скрипт для переключения активного класса:

$(function() { 
    $('.accordion').on('show', function (e) { 
     $(e.target).prev('.accordion-heading').find('.accordion-toggle').addClass('active'); 
    }); 
    $('.accordion').on('hide', function (e) { 
     $(this).find('.accordion-toggle').not($(e.target)).removeClass('active'); 
    }); 
}); 

ответ

4

Вы ссылаетесь на Bootstrap 3, когда вы используете события Bootstrap 2, см .: http://getbootstrap.com/javascript/#collapse. Плагин collapse добавляет класс (.in) уже.

, когда shown.bs.collapse запускает вашу «новую» панель с классом «.in», и когда hide.bs.collapse запускается, «старая» панель все еще имеет класс «.in».

попробовать:

$(function() { 
    $('#accordion').on('shown.bs.collapse', function (e) { 
     var offset = $('.panel.panel-default > .panel-collapse.in').offset(); 
      if(offset)$('html,body').scrollTop(offset.top); 
    }); 
}); 

`

+0

да я вставил неправильный код. он использует событие bootstrap 3. Но попробуем это сейчас. – bxmarg

+1

, который отлично работал. Просто гонан бросает в какую-то анимацию, чтобы сделать ее чище. БЛАГОДАРЯ! – bxmarg

1
$(".accordion-body").on("shown", function() { 
var id = $(this).attr('id'); 
$('html, body').animate({scrollTop: $('#'+id).offset().top + -50}, 1000); 
}); 
}); 
Смежные вопросы