vaweGitHub

Easingvawe After Effects eases

carry

It starts gently and is still moving fast at the end, so the next key can carry on.

carry reaches 50% of its travel at 77% of the time and 90% at 97%. Its peak speed is 4.79x the average.

vawe After Effects easespeak 4.79x

Progress against time0100.51progress50%90%
The dashed line is linear. The dots mark 50% and 90% of the travel.
Velocity, in multiples of average speed01400.51speed, x average
The dashed line is 1x, the speed of linear.

Live demo

The blue box uses the exact linear() string below, in your browser. The grey box is linear.

carry
linear

Your system asks for reduced motion, so the boxes rest at the end of the move.

Rendered with the vawe renderer: a 2 s film, carry against linear. It plays while on screen.

Numbers

50% of travel
77%of the time
90% of travel
97%of the time
After 10% of time
1.12%of the travel is done
Peak speed
4.79xtimes the average
Overshoot
0%stays inside the end
Undershoot
0%never below the start
linear() points
81at a 0.002 tolerance
cubic-bezier
exactbuilt from two handles

Copy the code

css linear() (exact)
animation-timing-function: linear(0, 0.0002, 0.0008, 0.0017, 0.003, 0.0046, 0.0065, 0.0087, 0.0112, 0.014, 0.017, 0.0204, 0.024, 0.0278, 0.0319, 0.0362, 0.0407, 0.0455, 0.0505, 0.0558, 0.0612, 0.0669, 0.0728, 0.0789, 0.0853, 0.0918, 0.0986, 0.1055, 0.1127, 0.1201, 0.1277, 0.1355, 0.1435, 0.1518, 0.1602, 0.1689, 0.1778, 0.1869, 0.1962, 0.2058, 0.2156, 0.2256, 0.2359, 0.2464, 0.2571, 0.2681, 0.2794, 0.291, 0.3028, 0.3149, 0.3272, 0.3399, 0.3529, 0.3662, 0.3799, 0.3939, 0.4082, 0.423, 0.4381, 0.4536, 0.4696, 0.4861, 0.5031, 0.5206, 0.5386, 0.5573, 0.5766, 0.5966, 0.6175, 0.6392, 0.6618, 0.6855, 0.7105, 0.7368, 0.7648, 0.7947, 0.827, 0.8623, 0.9016, 0.9464, 1);
cubic-bezier (exact)
animation-timing-function: cubic-bezier(0.3333, 0, 0.88, 0.424);

This ease is a cubic bezier by construction: the two After Effects handles are its two control points. The site ships the linear() string above because it is what the renderer and EASE.carry use.

web animations api
el.animate({ translate: ['0 0', '240px 0'] }, { duration: 600, easing: 'linear(0, 0.0002, 0.0008, 0.0017, 0.003, 0.0046, 0.0065, 0.0087, 0.0112, 0.014, 0.017, 0.0204, 0.024, 0.0278, 0.0319, 0.0362, 0.0407, 0.0455, 0.0505, 0.0558, 0.0612, 0.0669, 0.0728, 0.0789, 0.0853, 0.0918, 0.0986, 0.1055, 0.1127, 0.1201, 0.1277, 0.1355, 0.1435, 0.1518, 0.1602, 0.1689, 0.1778, 0.1869, 0.1962, 0.2058, 0.2156, 0.2256, 0.2359, 0.2464, 0.2571, 0.2681, 0.2794, 0.291, 0.3028, 0.3149, 0.3272, 0.3399, 0.3529, 0.3662, 0.3799, 0.3939, 0.4082, 0.423, 0.4381, 0.4536, 0.4696, 0.4861, 0.5031, 0.5206, 0.5386, 0.5573, 0.5766, 0.5966, 0.6175, 0.6392, 0.6618, 0.6855, 0.7105, 0.7368, 0.7648, 0.7947, 0.827, 0.8623, 0.9016, 0.9464, 1)', fill: 'both' });
vawe
import { EASE } from '../../core/motion/presets.js';

el.animate(
  [{ translate: '0 4vh', opacity: 0 }, { translate: '0 0', opacity: 1 }],
  { duration: 500, easing: EASE.carry, fill: 'both' },
);

// per-frame code (window.seek, vawe.onFrame): easeFn('carry')(u)

After Effects handles

One segment between two keys has two handles. In After Effects, open Keyframe Velocity on each key: the outgoing handle belongs to the first key and the incoming handle to the second. Influence is how far along the segment the handle reaches, in per cent of its duration. Speed is the pace at the key as a multiple of the segment's average (0 stops dead, 1 is straight).

HandleNameInfluenceSpeedReal handles near it
out (first key)easyEase33.333333333333336%0x33.35%
in (second key)fling12%4.8x0.37%

Measured on 1,339 real segments (2,678 handles) from Lottie files and 27 from HyperFrames blocks. Near means influence within 10 points and speed within 0.3 (25% above 1x). No real Lottie segment has both handles near this pair, so it is a motion-design choice and not an icon default.

vawe: key table
import { keys } from '../../core/motion/presets.js';

// out handle on the first key, in handle on the second
keys(el, 'translate', [
  [0, '0 6vh', { out: 'easyEase' }],
  [0.6, '0 0', { in: 'fling' }],
]);

When to use it, and when to avoid it

Use it for

  • A move that runs into a cut or a wipe, where the speed should pass to the next shot.
  • Carousels and orbits with keys one after another.

Avoid it for

  • A move that must come to rest. It ends at speed and looks cut off.
  • Moves with no next move to take the speed.

Moves that use carry

5 of the library's motion moves set EASE.carry in their snippet.