要素のリストが 2 つあり、単純な CSS トランジションを使用して、あるリストから別のリストに項目を移動したいと考えています。
ロジック:
- クラスを要素に追加し
hidden
てフェードアウトします (opacity: 0, width: 0, plus transition
) - トランジションが終了したら、要素を別のリストに移動します
hidden
要素がフェードインするようにクラスを削除します
HTML
<ul id="list1">
<li id="item1">Item 1</li>
<li id="item2">Item 2</li>
</ul>
<ul id="list2">
<li id="item3">Item 3</li>
<li id="item4">Item 4</li>
</ul>
CSS
...
li {
display: block;
float: left;
height: 80px;
margin: 0 2px;
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
width: 80px;
}
li.hidden {
opacity: 0;
width: 0;
}
...
JS
$(document).ready(function() {
$('li').click(function() {
var $item = $(this),
parentId = $item.parent().attr('id'),
newParentSelector = (parentId == 'list1') ? '#list2' : '#list1';
$item.addClass('hidden');
$item.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e) {
$item.appendTo(newParentSelector);
$item.removeClass('hidden');
});
});
});
LI
項目にクラス.hidden
が追加されると、トランジション アニメーションが期待どおりに実行されます。LI アイテムが別のリストに移動され、.hidden クラスが削除されると、トランジション アニメーションは実行されませんが、アイテムは正しい不透明度と幅で表示されます。
奇妙なことは、アイテムの「非表示」クラスを手動で切り替えると (つまり$('#item2').toggleClass('hidden');
、両方fade-in
とfade-out
アニメーションが実行されることです)。
この問題は、このfiddleで示されています。