Bootstrap 手风琴滚动到活动面板标题的顶部
Posted
技术标签:
【中文标题】Bootstrap 手风琴滚动到活动面板标题的顶部【英文标题】:Bootstrap accordion scroll to top of active panel heading 【发布时间】:2014-03-24 09:56:06 【问题描述】:我正在寻找一个代码,它可以滚动到我的 bootstrap 3 html/css 手风琴的当前活动面板标题的顶部。我在 *** 上找到的最接近的解决方案是下面 js 的 sn-p。
这个 sn-p 工作得相当好,但是当一个面板标题被点击时,页面滚动使得面板内容的最顶部与屏幕顶部齐平。有没有办法修改它,以便滚动效果将导致面板“标题”(与面板内容区域的顶部相反)在屏幕顶部可见?
$(function ()
$('#accordion').on('shown.bs.collapse', function (e)
var offset = $('.panel.panel-default > .panel-collapse.in').offset();
if(offset)$('html,body').scrollTop(offset.top); ); );
如果我也应该共享引导手风琴 html,请告诉我。
【问题讨论】:
【参考方案1】:我用过这个,它工作得很好,如果你需要稍微向上或向下调整,你可以在 .offset().top 之后调整 -20。
$(function ()
$('#accordion').on('shown.bs.collapse', function (e)
var offset = $('.panel.panel-default > .panel-collapse.in').offset();
if(offset)
$('html,body').animate(
scrollTop: $('.panel-title a').offset().top -20
, 500);
);
);
【讨论】:
它在动画中表现得有些滑稽,但它仍然有效;) 有没有办法让这个滚动到实际点击的.panel-heading?它目前正在滚动到第一个,在移动设备上不是很好。 @JamesWilson 我在下面回答了如何定位实际点击的 .panel-heading :) 在动画结束后尝试使用鼠标滚动时,是否有人出现冻结/闪烁效果? 无论如何要让这个javascript逻辑适用于任何面板,这样我们就不必在scrollTop类名中硬编码???【参考方案2】:这是针对根据 James Wilson 对已接受答案的评论而点击的特定 .panel-heading。
$(function ()
$('#accordion').on('shown.bs.collapse', function (e)
var offset = $(this).find('.collapse.in').prev('.panel-heading');
if(offset)
$('html,body').animate(
scrollTop: $(offset).offset().top -20
, 500);
);
);
我从 gigelsmith 接受的答案中改变的只是 'var offset' 和 scrollTop 的目标。
【讨论】:
很好的解决方案@JWPersh !!!!!!我只是按原样复制粘贴它,它工作得很好!!!【参考方案3】:我无法得到上面的答案,也许我遗漏了一些东西,但我看不到上面的 scrollTop 行与当前打开的手风琴项目有何关系,所以改用以下代码。希望对其他人有所帮助:
$(function ()
$('#accordion').on('shown.bs.collapse', function (e)
var offset = $('.panel.panel-default > .panel-collapse.in').offset();
if(offset)
$('html,body').animate(
scrollTop: $('.panel-collapse.in').siblings('.panel-heading').offset().top
, 500);
);
);
【讨论】:
您的版本正在使用类选择器“.panel-group”而不是 ID 选择器“#accordion”。后者仅在您的 html 中定义了该 ID 时才有效,这不是手风琴的要求。【参考方案4】:总是动画看起来有点太多了,所以这是我的版本,仅在标题超出可见部分时才执行此工作。
(请注意,我使用 data-accordion-focus
来应用修复)
$('[data-accordion-focus]').on('shown.bs.collapse', function (e)
var headingTop = $(e.target).prev('.panel-heading').offset().top - 5;
var visibleTop = $(window).scrollTop();
if (headingTop < visibleTop)
$('html,body').animate(
scrollTop: headingTop
, 500);
);
【讨论】:
如果您使用的是版本 4,只需将 panel-heading 类替换为 card-header【参考方案5】:通过使用.panel-default
作为.on()
的选择器,您可以滚动到活动面板。
$('#accordion').on('shown.bs.collapse', '.panel-default', function (e)
$('html,body').animate(
scrollTop: $(this).offset().top
, 500);
);
【讨论】:
以上是关于Bootstrap 手风琴滚动到活动面板标题的顶部的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap手风琴,点击时滚动到活动(打开)手风琴的顶部?
Bootstrap手风琴,点击时滚动到活动手风琴的顶部,我将如何在嵌套手风琴上实现?