我有一个Bootstrap手风琴,里面有很多面板。我面临的问题是,如果面板打开页面,用户不知道面板是打开的,他们可以向下滚动到它。
为了解决这个问题,我希望能够滚动到现在打开的内容,这样他们就知道内容是打开的,并且可以防止它们滚动到它。
我试图尝试这个时似乎遇到了问题。
这就是我的功能
$('.accLink').on('click', function(){
if($(this).parent().next('.panel-collapse').hasClass('in')){
}else{
//This is where the scroll would happen
}
});
到目前为止,我已经尝试过......
$('html, body').animate({
scrollTop: ($(this).parent().next('.panel-collapse'))
},500);
和
$('div').animate({
scrollTop: ($(this).parent().next('.panel-collapse'))
},500);
我也试过这样的事情......
function scrollToElement(ele) {
$(window).scrollTop(ele.offset().top).scrollLeft(ele.offset().left);
}
var element = $(this).parent().next('.panel-collapse').attr('id');
scrollToElement($('#'+element));
但是没有对页面做任何事情。它只是坐在那里。任何帮助将不胜感激!
答案 0 :(得分:17)
使用Bootstrap的内置事件回调,而不是单独的click事件监听器:
$("#accordion").on("shown.bs.collapse", function () {
var myEl = $(this).find('.collapse.in');
$('html, body').animate({
scrollTop: $(myEl).offset().top
}, 500);
});
或者,如果您希望标题显示:
$("#accordion").on("shown.bs.collapse", function () {
var myEl = $(this).find('.collapse.in').prev('.panel-heading');
$('html, body').animate({
scrollTop: $(myEl).offset().top
}, 500);
});
答案 1 :(得分:0)
滚动页面以在页面顶部显示展开/活动的手风琴
$('#accordion').on('shown.bs.collapse', function (e) {
var offset = $('.panel.panel-default > .panel-collapse.in').offset().top;
if (offset > 0) {
$('html,body').animate({
scrollTop: $('.panel .active').offset().top - 100
}, 500);
// you can chagne 100 value to take distance in pixels from top in page
}
});