私には3つのdivがあり、それぞれには隠されたコンテンツがあります。 divをクリックすると、その内容が下にスライドして表示されます。同時に、scrollTopを使用して、クリックされたブロックの上部にブラウザをスクロールさせます。 HTMLは次のようになります。scrollTopアニメーションの問題
<div class="blocks block1"></div>
<div class="content block1_content"></div>
<div class="blocks block2"></div>
<div class="content block2_content"></div>
<div class="blocks block3"></div>
<div class="content block3_content"></div>
ただし、スクロールトップアニメーションの一部に問題があります。ここでJSは次のとおりです。
$('.blocks').on("click", function() {
if (!$(this).hasClass('expanded')) {
collapseExpandedFunction();
$('html, body').animate({
scrollTop: $(this).offset().top
}, 500);
$(this).addClass('expanded');
$(this).next().slideDown();
} else if ($(this).hasClass('expanded')) {
collapseExpandedFunction();
}
});
collapseExpandedFunction = function() {
$('.blocks.expanded').removeClass('expanded');
$('.content').slideUp();
};
私は簡単に問題を実証するjsfiddleをした:https://jsfiddle.net/ss53ckyk/3/
、について説明:
あなたが緑のブロックを切り替え開始し、赤または青を切り替える場合は、大丈夫だよー。緑色のコンテンツは非表示になり、赤色/青色は表示され、ブロックの上部にスクロールされます。
問題は、上から開始して下に移動する場合です。最初に赤色を切り替え、次に青色または緑色を切り替えると、ブラウザは正しくスクロールしません。
私が気に入っている別のものは、scrollTopアニメーションが完了した後にslideDownを行うことです。
誰かが私を助けてくれることを願っています。
EDIT:
だけ一度に表示内容1つのブロックがあるはずです。たとえば、赤を一度クリックしてから青をクリックすると、青が表示されている間に赤の内容が上にスライドします。
返事をいただきありがとうございます。現在はまだまだ問題はありますが、問題はまだあります。 collapseExpandedFunction()は他のすべてのブロックの内容をスライドさせるためのものでした。一度に表示できるブロックコンテンツは1つだけです。たとえば、赤を一度クリックしてから青をクリックすると、青が表示されている間に赤の内容が上にスライドします。どのように彼を解決するための任意のアイデア? ...これで投稿を編集しました。 – qua1ity
@ qua1ity:私は解決策を更新しました。これはあなたのために働くことを望みます。 – DinoMyte