2017-01-30 8 views
0

サイトのコンテンツの上にポップアップしてコンテンツをプッシュして連絡先フォームを表示する、自分のサイトにjqueryアコーディオンが動作しています。トリガーはトップバー内のメニュー項目です。私はトップバーがべたつかないようにしたいので、アコーディオンが開く前にトップページまでスクロールする必要があります。現在、ボタンをクリックすると、上部にスクロールし、同時にアコーディオンが開きますので、フォームは非表示になり、scrollTopを実行した後に手動でスクロールしてフォームを表示する必要があります。 scrollTopが実行されるまで、アコーディオンが開かないようにするにはどうしたらいいですか?また、ページが既に近くにある場合やアコーディオンのオープニングに遅延がない場合(setTimeoutは役に立ちません)。これまでのコードは、これまで通りです。jquery.accordion delay open

function initContactAccn() { 
$("#toggle-o").on("click", function(event) { 
    $("[data-accordion] [data-control]").click(); 
}); 

}; 
initContactAccn(); 

function jqueryAccordion() { 
$('#contact-accordion').accordion({ 
    "transitionSpeed": 500, 
    collapsible: true, 
    heightStyle: "content", 
    beforeActivate: function(event, ui) { 
     $("html, body").animate({ scrollTop: 0 - 422 }, "fast"); 
     return false; 
    } 
}); 
}; 
jqueryAccordion(); 

私はこれが意味をなされることを望みます。どのような洞察にも感謝します。 Btw、422はアコーディオンの高さです。

答えて

0

は、あなたのアニメーションが完了したときにアコーディオンを呼び出して、最初のアニメーションを実行します。

function initContactAccn() { 
    $("#toggle-o").on("click", function(event) { 
    $("[data-accordion] [data-control]").click(); 
    }); 

}; 
initContactAccn(); 

function jqueryAccordion() { 
    $("html, body").animate({ scrollTop: 0 - 422 }, "fast", function() { 
    $('#contact-accordion').accordion({ 
     "transitionSpeed": 500, 
     collapsible: true, 
     heightStyle: "content" 
    }); 
    }); 
}; 
jqueryAccordion(); 

の$ .animateは、アニメーション終了後に実行するコールバック関数のオプションの三番目のパラメータを受け付けます。

+0

スクロールトップが閉じるのを待たずに、アコーディオンのタイムアウトを設定して、$( "body")とscrollTop()の値と希望する値の差を計算して、 。 – thegunmaster

+0

残念ながら正しい動きで、間違いなく動いています...ありがとう – pjldesign