我有一个项目列表。当我点击一个项目(项目)时,它会打开(这没关系),它会滚动到页面顶部(错误的顶部!)。当我有一个打开的项目并且我决定打开下面的项目时会出现问题:顶部位置因打开的项目高度而增加,而我点击的第二个项目在顶部太远。
按照下面的FIDDLE:如果我打开 project1 然后我点击 project2 ,这就错了。如果我尝试在另一个打开的项目下面打开任何项目,则相同
JS
$('.accordion-section-title').on('click', function () {
var idName = $(this).attr('id');
$('html, body').animate({
scrollTop: $("#" + idName).offset().top
}, 500);
});
这是FIDDLE
答案 0 :(得分:0)
问题似乎是.slideUp()
和.slideDown()
方法在窗口滚动的同时进行动画处理。当窗口滚动到右Y坐标时,手风琴部分的高度已被改变,从而导致窗口最终位于错误的位置。
我确信还有其他方法可以实现正确的滚动位置,但我首先想到的是在页面加载后存储初始Y位置。这可以这样做:
$('.accordion-section-title').each(function() {
$(this).data('ypos', $(this).offset().top)
})
每个.accordion-section-title
元素的Y位置都存储在名为ypos
的数据属性中。稍后滚动窗口时,不要滚动到元素位置,而是滚动到存储的初始位置。换句话说,将scrollTop: $("#" + idName).offset().top
更改为scrollTop: $("#" + idName).data('ypos')
。与您的代码放在一起,它将如下所示:
$('.accordion-section-title').on('click', function(e) {
var idName = $(this).attr('id');
$('html, body').animate({
scrollTop: $("#" + idName).data('ypos') - 10
}, 500);
});
您可以在this fiddle
中看到它的效果