我有一系列使用以下代码激活的手风琴:
$(function () {
$(".specialreveal").hide();
$('[href="#"]').attr('href', 'javascript:void(0)');
$(document).on("click", "a.biobutton", function () {
var $currentSection = $(this).closest(".biowrapper").find(".specialreveal").toggle('slow').end();
//If you want to hide all other `specialreveal` sections
$(".biowrapper").not($currentSection).find(".specialreveal").hide('fast').end();
});
});
我想在点击一个元素时将手风琴滚动到顶部并使用它:
$( ".biowrapper" ).click(function() {
$('html,body').delay( 1200 ).animate({scrollTop: $(this).offset().top}, 800);
});
我遇到的问题是,如果上面的手风琴选项卡打开,我点击下面的那个,滚动到顶部会被抛弃,因为我假设数学是在打开两个标签的情况下计算的,所以当一个关闭时顶部参考是错误的。
我已经尝试过设置延迟(),触发器()等等,但我似乎无法做到正确。
我希望能够在上一个标签关闭并打开新标签后滚动到顶部。
答案 0 :(得分:0)
问题在于offset().top
会立即计算,然后存储起来以供animate
以后使用。
只需使用计时器来延迟操作:
$( ".biowrapper" ).click(function() {
setTimeout(function(){
$('html,body').animate({scrollTop: $(this).offset().top}, 800);
}, 1200);
});
理想情况下,您会通过手风琴本身的事件来听取以前的操作结束
答案 1 :(得分:0)
听起来您希望滚动条能够在activate事件
上运行激活面板后(动画完成后)触发
$(".biowrapper").accordion({
activate: function(evt, ui) {
$('html,body').animate({
scrollTop: $(this).offset().top
}, 800);
}
});