Bootstrap手风琴,在点击时滚动到活动(开放)手风琴的顶部?

我正在使用Bootstrap创建一个响应式网站,它包含大量文本的手风琴,当你读到底部并单击下一个手风琴时,大量文本被折叠,我留在页面底部。

我发现这个有用的代码从Bootstrap手风琴滚动到活动面板标题的顶部,但它滚动到所有手风琴的顶部,而不是打开的特定手风琴。

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

如何修改此代码以滚动到当前活动的手风琴的顶部?

HTML;

  

您可以通过获取“目标元素”的顶部然后在主体上调用动画来为滚动设置动画。

 $('html, body').animate({ scrollTop: $("#target-element").offset().top }, 1000); 

将它修改成这样的东西将有助于你实现你所追求的目标

 $('.panel-collapse').on('shown.bs.collapse', function (e) { var $panel = $(this).closest('.panel'); $('html,body').animate({ scrollTop: $panel.offset().top }, 500); }); 

来源: http : //www.abeautifulsite.net/smoothly-scroll-to-an-element-without-a-jquery-plugin-2/

互补的小提琴: https : //jsfiddle.net/hjugdwbp/


编辑:2018-05-25

Bootstrap 4示例

使用手风琴示例: https : //getbootstrap.com/docs/4.0/components/collapse/#accordion-example我修改了代码以支持卡片。

 $('.collapse').on('shown.bs.collapse', function(e) { var $card = $(this).closest('.card'); $('html,body').animate({ scrollTop: $card.offset().top }, 500); }); 

小提琴: https : //jsfiddle.net/agpkc4v2/1/

我正在开发一个需要相同function的项目。 想出了以下代码。 我添加了变量以便澄清:

 $('#accordion').on('shown.bs.collapse', function (e) { var panelHeadingHeight = $('.panel-heading').height(); var animationSpeed = 500; // animation speed in milliseconds var currentScrollbarPosition = $(document).scrollTop(); var topOfPanelContent = $(e.target).offset().top; if ( currentScrollbarPosition > topOfPanelContent - panelHeadingHeight) { $("html, body").animate({ scrollTop: topOfPanelContent - panelHeadingHeight }, animationSpeed); }});