事件监听器onclick()? - 手风琴

时间:2015-04-20 14:44:57

标签: jquery accordion

我有一系列使用以下代码激活的手风琴:

$(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);

});

我遇到的问题是,如果上面的手风琴选项卡打开,我点击下面的那个,滚动到顶部会被抛弃,因为我假设数学是在打开两个标签的情况下计算的,所以当一个关闭时顶部参考是错误的。

我已经尝试过设置延迟(),触发器()等等,但我似乎无法做到正确。

我希望能够在上一个标签关闭并打开新标签后滚动到顶部。

2 个答案:

答案 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);
    }
});