Я начинаю анимацию CSS с использованием следующего кода JavaScript (element
является div
, name
- это имя существующего правила, destination
- это элемент, в который должен перемещаться элемент). При первом вызове этой функции он работает по назначению (div
мягко перемещается в конечный пункт назначения). Во второй раз он просто переходит к месту назначения (потому что я явно установил left
и top
), но никакого движения не происходит. Если я установил точку останова в строке, где происходит присвоение имени (webkitAnimationName
), анимация выполняется так же, как и в первый раз. Мне нужна задержка?CSS-анимация работает только один раз
function flyTo(element, name, destination) {
var rule = findKeyframesRule(name);
if (rule != null) {
element.style.webkitAnimationName = "none";
// remove the existing 0% and 100% rules
rule.deleteRule("from");
rule.deleteRule("to");
// create new 0% and 100% rules
rule.insertRule("from {top: " + element.style.top + "; left: " + element.style.left + ";}");
rule.insertRule("to {top: " + px(destination.y) + "; left: " + px(destination.x) + ";}");
// assign the animation to our element (which will cause the animation to run)
element.style.left = px(destination.x);
element.style.top = px(destination.y);
element.style.webkitAnimationDuration = "1s";
element.style.webkitAnimationTimingFunction = "linear";
element.style.webkitAnimationName = name;
} else {
element.style.left = px(destination.x);
element.style.top = px(destination.y);
}
}
Я использую Google Chrome
Решение найдено: после установки имени анимации я вызываю задержанную функцию, которая сбрасывает имя анимации на «none». Если имя очищено и установлено в одном фрагменте кода, браузер не распознает изменение и ничего не делает. – Gerhard