Способ определения точных свойств стиля, которые в данный момент применяются веб-анимацией (без смешивания со всеми примCSS

Разбираемся в CSS
Ответить
Anonymous
 Способ определения точных свойств стиля, которые в данный момент применяются веб-анимацией (без смешивания со всеми прим

Сообщение Anonymous »

Я работаю над проектом, в котором мне хотелось бы иметь возможность точно определить, какие свойства стиля анимация в данный момент применяет к элементу, и в идеале только те изменения, которые вносит анимация.
В приведенном ниже примере я хотел бы иметь возможность точно знать, как устанавливаются свойства масштабирования и поворота, независимо от того, где я приостановил анимацию без необходимость сортировки внутренних свойств, таких как отступы или синий цвет, передаваемый другой кнопкой.
Если это просто невозможно легко сделать, это нормально , мне просто нужно подтверждение этого. Если да, то я открыт для мозгового штурма разумных альтернатив.
Что я рассмотрел:
Я видел несколько качественных примеров использования getComputedStyle() и я думаю, что это довольно близко к тому, что я хочу, но в идеале мне нужен объект или строка CSS, которая содержит только свойства стиля, которые применяются анимацией (поэтому никаких параметров базового стиля, которые поступают из файла CSS или применяться другими способами).
Я довольно тщательно просмотрел документацию по API веб-анимации и не нашел ничего, что напрямую отвечало бы моим потребностям. Разумный наивный подход состоит в том, чтобы посмотреть на первый или последний (в зависимости от направления анимации) объект keyFrameEffect в анимации и проверить пары значений свойств на наличие соответствующих свойств, но с тем, сколькими способами анимацию можно приостановить или закончить в промежуточных/неожиданных местах в цикл анимации это не кажется основательным решением. Например, это не будет работать, если анимация приостановлена ​​или даже находится в состоянии завершения, если установлено такое значение, как iterationStart, поскольку теперь оно смещает состояние завершения от последнего ключевого кадра.
Возможно, есть способ взять объект анимации и применить его точное текущее состояние к пустому объекту с помощью commitStyles() или чего-то еще, чтобы результирующий объект стилей на пустом элементе содержал только свойства, примененные анимацией? Меня беспокоят пользовательские элементы/свойства, но, возможно, я слишком много об этом думаю.
Независимо от того, что это критично, я не меняю напрямую анимируемый элемент или какие-либо его свойства, поэтому Мне нужно быть осторожным и убедиться, что стили фиксации влияют только на пустой объект. Возможно, изменив цель ключевых кадров, а затем вернув ее обратно по завершении?
Спасибо. заранее за любые предложения!
Пример:

Код: Выделить всё

const newspaper = document.querySelector(".newspaper");
const colorChange = document.querySelector(".color-change");
const pauseButton = document.querySelector(".pause");
const finish = document.querySelector(".finish");

// I want a way to directly get the current value of these properties
// without being mixed in with other non animation related css properties
const newspaperSpinning = [
{ transform: "rotate(0) scale(1)" },
{ transform: "rotate(360deg) scale(0.7)" },
];

const newspaperTiming = {
duration: 2000,
iterations: 999,
fill: 'forwards',
iterationStart: 0.3
};

const newspaperKeyFrames = new KeyframeEffect(
newspaper, // element to animate
newspaperSpinning,
newspaperTiming, // keyframe options
);

const animation = new Animation(
newspaperKeyFrames,
document.timeline,
);

newspaper.addEventListener("click", () => {
animation.play()
});

colorChange.addEventListener("click", () => {
newspaper.style.color = 'blue';
});

pauseButton.addEventListener("click", () => {
animation.pause();
});

finish.addEventListener("click", () => {
animation.finish();
});

Код: Выделить всё

html,
body {
height: 100%;
}

body {
display: flex;
justify-content: center;
align-items: center;
background-color: black;
}

button {
cursor: pointer;
}

.newspaper {
padding: 0.5rem;
text-transform: uppercase;
text-align: center;
background-color: white;
cursor: pointer;
}

Код: Выделить всё

click to start spinning newspaper animation
click to change the color
click to pause the animation
click to finish the animation


Примечание: если на элемент в данный момент действует несколько анимаций, это нормально, и возможно, даже предпочтительнее, если результатом является список/объект всех свойств стиля, активно передаваемых любой анимацией элемента.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -a-web-ani
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»