私は、marginプロパティでサイドバーアニメーションを作成しようとしています。サイドバーにHTML属性hidden
を切り替えてアクセス可能にしています。CSS遷移タイミングでのjQueryオペレーション
私の質問は、なぜ、サイドバーを表示するアニメーションが1回目の試行後に壊れてしまうのですか?私がaddClass
に任意のタイムアウトを追加するとそれは後続の試行で動作しますが、removeAttr
は同期していないと思われますか?
HTML
<div id="wrapper">
<div id="sidebar"></div>
<div id="main"></div>
</div>
CSS
#sidebar {
margin-left: -200px;
transition: margin 0.3s ease-out;
}
#wrapper.show-aside #sidebar {
margin-left: 0;
}
JS
// Show sidebar
$('#sidebar').removeAttr('hidden');
$('#wrapper').addClass('show-sidebar');
// Hide sidebar
$('#wrapper').removeClass('show-sidebar');
setTimeout(function() {
$('#sidebar').attr('hidden', 'hidden');
}, 300); // Wait for CSS transition to finish
返事のおかげで、これは私が探しているものを非常にではありません。私はショーボタンがクリックされたときにサイドバーアニメーションをすぐに表示したい。私は、CSSの遷移が 'display'プロパティでアニメートされないことを理解しています。そのため、クラスを追加する前に隠し属性を削除しています。私が理解していないのは、クラスを追加する際に 'setTimeout'が必要な理由です。もしそれらの関数が同期して実行されることになっていたら? ( 'removeAttr'にはコールバックパラメータはありません) –