- A function similar to linear() that supports control points so we can make multi-point Bezier paths.
- calc() support as an easing function so you could combine sin(), etc., and do oscillation with damping.
- A spring() function that remembers the current velocity for when parameters change.
Additionally, animations are often tightly linked to your page styles which are set in CSS. It’s easier to reason about them if they’re all in the same file and language instead of split across CSS and JS.
* It's easier to write without pulling in dependencies.
* Being simpler syntax means smaller page sizes.
* In theory, CSS animations can be faster.
* You don't have to worry about attaching listeners to dynamic content.
* Styling with JS violates Separation of Concerns.
* `prefers-reduced-motion` is only available in CSS, so JS has to run a CSS query anyway.
Uh huh... How long till a proper implementation of CSS requires a proper emulator of relativistic physics and quantum effects? Have we learned nothing from modern browsers already becoming de-facto poorly-specced and poorer-yet implemented JS-based operating systems / malware delivery vehicles?
Back in the Macromedia Flash 5 days (25 years ago!), Robert Penner popularized the easing concept. I can't imagine the void we had before that. I clearly remember me starring at the formulas in ActionScript 1.0 (see [1]) without any chance of understanding them - but usage was clear, easy and fun!
Those formulas basically generated the required tweening numbers mathematical (comparable to the Bezier approach mentioned in the article). That's a much different concept to the linear interpolation described in the linked blog article where you pass in a static list of numbers. The more complex your curve the more numbers you need. That's when the author links to the external tool "Linear() Easing Generator" by Jake Archibald and Adam Argyle. It was a fresh and nice reading even though animations are less a topic for me then it was back with Flash.
Here an example of an easing function from the linked source file. The tween executing function would pass in time (t) and other parameters I can't name to calculate the resulting value continuously.
Math.easeInOutBack = function (t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
};
If you want to dig deeper, visit roberpenner's easing overview [2] with some resources. Surprisingly all of those links are still working.[1] https://robertpenner.com/easing/penner_easing_as1.txt [2] https://robertpenner.com/easing/
Reason I mention it is neither this nor bezier curves deal with the target changing mid-animation very well. CSS just starts over from the current position, which breaks the illusion. A physics engine would maintain the illusion, and could be simpler to specify:
transition: physics(system=gravity, force=10, bounce=on, dampening=3)
transition: physics(system=spring, force=5, bounce=off, dampening=5)
SweetSoftPillow•2h ago
Edit: it seems it's caused by autoplay of Easing Wizard's video.