В ответ на щедрость:
Если вы не можете позволить себе роскошь знать, какое свойство переносится, или просто не думаете, что стоит заставить setTimeout
запускать анимацию, вы можете принудительно выполнить переворачивание другим способом.
Причина, по которой setTimeout
работает в первую очередь, связана с тем, что вы тем временем вызываете полное переиздание документа, даже если для длительности установлено значение 0
. Это не единственный способ вызвать оплавление.
JavaScript
for (x = Math.ceil(Math.random() * 10), i=0;i<x;i++){
$('<div />').appendTo($('#container')).addClass('trans');
}
var divs = $('#container div');
var x = divs.eq(Math.ceil(Math.random() * divs.length));
x[0].offsetHeight;
x.addClass('wide');
С помощью этого JavaScript мы случайным образом добавляем от 1 до 10 div
элементов, а затем выбираем один из них случайным образом и добавляем класс wide
.
Там вы увидите странную строку JavaScript, а именно x[0].offsetHeight
. Это основа всей операции. Вызов offsetHeight
вызывает переформатирование документа без использования setTimeout или запроса значения CSS.
Что такое перекомпоновка по отношению к DOM:
Перекомпоновка вычисляет макет страницы. Перекомпоновка элемента
пересчитывает размеры и положение элемента, а также
запускает дальнейшие переливы на детей, предков и элементов этого элемента
элементы, которые появляются после него в DOM. Тогда это вызывает финал
перекрашивать. Переплата очень дорогая, но, к сожалению, это может быть
срабатывает легко.
Поэтому, пожалуйста, будьте осмотрительны в том, как вы используете эти функции. Не слишком беспокоит большинство современных браузеров (так как jQuery известен тем, что запускает несколько перефразировок), но все же стоит подумать, прежде чем добавлять что-то вроде этого решения на ваш сайт.
Важное примечание: Это не более или менее эффективный, чем setTimeout
звонок . Это не решение волшебной пули, и оно делает то же самое под капотом.
Вот соответствующий CSS, для справки:
.trans {
width: 20px;
height: 20px;
background-color: cyan;
-webkit-transition: all 5s ease;
-moz-transition: all 5s ease;
-o-transition: all 5s ease;
transition: all 5s ease;
}
.trans.wide {
width: 200px;
}