Как я могу гарантировать, что переходы CSS будут возникать в результате перемещения элементов в DOM с помощью jQuery?CSS Переходы в результате jQuery DOM Манипуляции
Следующий переход CSS игнорируется при использовании селектора состояний последнего дочернего элемента. Стиль обновляется, как ожидалось, но переходного времени к этому стилю не существует.
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
li {
background-color: red;
}
li:last-child {
background-color: yellow;
transition: 3s ease;
}
// move list item to last place when clicked
$('li').click(function() {
var parent = $(this).parent();
$(this).detach().appendTo(parent);
});
Единственный способ, которым я могу показаться, чтобы обеспечить переход будет происходить, чтобы добавить класс после небольшого SetTimeout вызова, а не использовать селектор состояния.
li.activate {
background-color: yellow;
transition: 3s ease;
}
$('li').click(function() {
var item = $(this);
var parent = item.parent();
item.detach().appendTo(parent);
setTimeout(function() {
parent.children().removeClass('activate');
item.addClass('activate');
}, 5);
});
Вы не указали параметр для перехода. Каким должен быть переход? Другое дело, вам нужно установить переход для элемента li, а не: last-child. –
все сложно. Перемещающийся элемент должен * оставить позади * некоторую оболочку, которая 1. анимирует до высоты входящего элемента и 2. чем становится оберткой этого элемента .... и вам нужно сделать это для всех движущихся элементов: D –
Другое решение: перед перемещением всех элементов вы вычисляете их состояния и делаете их абсолютными (например, перемещая фигуры на холсте ...), чем после перехода вы восстанавливаете/перезаписываете позиции DOM и т. д. и т. д. и т. д. Итак, все, .animate() 'или' transition' является абсолютным элементом перед тем, как притворяться и перестраивать новое положение, тем самым подделывая временные анимации оберток и уничтожая их и т. д. –