2015-04-20 111 views
0

我有一系列的手風琴使用下面的代碼激活:事件監聽器onclick()? - 手風琴

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

問題是,offset().top立即計算然後存儲供animate以後使用。

只需用一個定時器,以延遲代替操作:

$(".biowrapper").click(function() { 
    setTimeout(function(){ 
     $('html,body').animate({scrollTop: $(this).offset().top}, 800); 
    }, 1200); 
}); 

理想情況下,你反而會聽以前的操作通過對手風琴本身

+0

我試過了,但它還是把它弄糊塗了。也許是因爲數學依然是先打開兩個選項卡纔算得出來的,只能在延遲時間內完成......? – Deedub

+0

顯示的示例執行回調中的計算(1200毫秒後)。最好看看第二個選項(手風琴上的活動)。 –

0

事件結束聽起來像是你想你滾動以在activate事件上運行

面板激活後(動畫完成後)觸發

$(".biowrapper").accordion({ 
    activate: function(evt, ui) { 
     $('html,body').animate({ 
      scrollTop: $(this).offset().top 
     }, 800); 
    } 
}); 
+0

xcept不使用jquery .accordion ..?還有什麼工作? – Deedub

+1

@Deedub那麼你爲什麼要標記'jquery' /'accordion'這個問題?除非你正在使用的庫也有一個激活事件,那麼我會說不... – James

+0

因爲它是jQuery,但只是沒有使用他們的手風琴功能,而是使用切換。 – Deedub