jQuery:FadeOut then SlideUp が見つかりましたが、それは良いことですが、それは違います。
fadeOut()
とslideUp()
を同時に実行するにはどうすればよいですか?同じ遅延で2つのsetTimeout()
呼び出しを試みましたが、ページがロードされるとすぐにslideUp()
が発生しました。
誰もこれをしましたか?
次のようなことができます。これは完全なトグルバージョンです。
$("#mySelector").animate({ height: 'toggle', opacity: 'toggle' }, 'slow');
厳密にフェードアウトの場合:
$("#mySelector").animate({ height: 0, opacity: 0 }, 'slow');
高さを直接アニメーション化すると、一部のWebページでぎくしゃくした動きになります。ただし、CSSトランジションとjQueryのslideUp()
を組み合わせると、スムーズに消える行為になります。
_const slideFade = (elem) => {
const fade = { opacity: 0, transition: 'opacity 0.5s' };
elem.css(fade).slideUp();
}
slideFade($('#mySelector'));
_
コードをいじる:
https://jsfiddle.net/00Lodcqf/435
状況によっては、100ミリ秒の非常に速いポーズでフェードを増やすと、わずかに滑らかなエクスペリエンスが作成されます。
_ elem.css(fade).delay(100).slideUp();
_
これはdna.jsプロジェクトで使用したソリューションで、追加のサポートを確認するためにdna.ui.slideFade()
関数のコード( github.com/dnajs/dna.js )を表示できます。トグルとコールバック用。
「Nick Craver」による受け入れられた答えは間違いなく進むべき道です。私が追加する唯一のことは、彼の答えが実際にそれを「隠す」わけではないということです。つまり、DOMはまだそれを表示可能な要素として見ているということです。
'slid'要素にマージンまたはパディングがある場合、これは問題になる可能性があります...それらは引き続き表示されます。そこで、アニメーションが完了した後に実際に非表示にするために、animate()関数にコールバックを追加しました。
$("#mySelector").animate({
height: 0,
opacity: 0,
margin: 0,
padding: 0
}, 'slow', function(){
$(this).hide();
});
slideUp
メソッドとfadeOut
メソッド自体を使用してこれを行うことができます。
$('#mydiv').slideUp(300, function(){
console.log('Done!');
}).fadeOut({
duration: 300,
queue: false
});
@CodeKoalasに基づいて、さらに改良を加えます。垂直方向のマージンとパディングは考慮されますが、水平方向は考慮されません。
$('.selector').animate({
opacity: 0,
height: 0,
marginTop: 0,
marginBottom: 0,
paddingTop: 0,
paddingBottom: 0
}, 'slow', function() {
$(this).hide();
});
同様の問題があり、このように修正しました。
$('#mydiv').animate({
height: 0,
}, {
duration: 1000,
complete: function(){$('#mydiv').css('display', 'none');}
});
$('#mydiv').animate({
opacity: 0,
}, {
duration: 1000,
queue: false
});
queueプロパティは、アニメーションをキューに入れるか、すぐに再生するかを指示します