рдкреЗрд╢ рд╣реИ linear()
, рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдИрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЕрдкрдиреЗ рдкреЙрдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд▓реАрдирд┐рдпрд░ рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЯрд░рдкреЛрд▓ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдмрд╛рдЙрдВрд╕ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрдлрд╝реЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
CSS рдореЗрдВ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдРрдирд┐рдореЗрдЯ рдпрд╛ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХрд░рддреЗ рд╕рдордп, animation-timing-function
рдФрд░ transition-timing-function
рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдХрд┐рд╕реА рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рджрд░ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдкреНрд░реАрд╕реЗрдЯ рдХреЗ рддреМрд░ рдкрд░ рдХрдИ рдХреАрд╡рд░реНрдб рдЙрдкрд▓рдмреНрдз рд╣реИрдВ. рдЬреИрд╕реЗ, linear
, ease
, ease-in
, ease-out
, рдФрд░ ease-in-out
. рдЕрдкрдиреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдИрдЬрд╝рд┐рдВрдЧ рдХрд░реНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, cubic-bezier()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ рдпрд╛ steps()
рдИрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЪрд░рдгреЛрдВ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдИрдЬрд╝рд┐рдВрдЧ рдХрд░реНрд╡ рдмрдирд╛рдПрдВ.
рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░, рдИрдЬрд╝рд┐рдВрдЧ рд╕реЗ рдРрдирд┐рдореЗрд╢рди рд╡рд╛рд▓реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдЧрддрд┐ рдорд┐рд▓рддреА рд╣реИ.
рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ, рдмрд╛рдЙрдВрд╕ рдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрдлрд╝реЗрдХреНрдЯ рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░реНрд╡ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ. рд╣рд╛рд▓рд╛рдВрдХрд┐, linear()
рдХреА рдорджрдж рд╕реЗ рдЕрдм рдЙрдиреНрд╣реЗрдВ рдХрд╛рдлрд╝реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
linear()
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
linear()
рдХреА рдорджрдж рд╕реЗ, рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдХреЙрдорд╛ рд▓рдЧрд╛рдХрд░ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдХрдИ рд╕реНрдЯреЙрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ. рд╣рд░ рд╕реНрдЯреЙрдк рдПрдХ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ 0 рд╕реЗ 1 рдХреЗ рдмреАрдЪ рд╣реЛрддрд╛ рд╣реИ. рд╣рд░ рд╕реНрдЯреЙрдк рдХреЗ рдмреАрдЪ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд▓реАрдирд┐рдпрд░ рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
animation-timing-function: linear(0, 0.25, 1);
рдпреЗ рд╕реНрдЯреЙрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЬреИрд╕реЗ рдЕрдВрддрд░ рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ. рдкрд┐рдЫрд▓реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 0.25
рдХреА рдЖрдЙрдЯрдкреБрдЯ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ 50% рдорд╛рд░реНрдХ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.
рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП linear(0, 0.25, 1)
рдХрд╛ рдЧреНрд░рд╛рдлрд╝ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕реНрдЯреЙрдк рдХреЛ рдмрд░рд╛рдмрд░ рджреВрд░реА рдкрд░ рдирд╣реАрдВ рд░рдЦрдирд╛ рд╣реИ, рддреЛ рд╕реНрдЯреЙрдк рдХреА рд▓рдВрдмрд╛рдИ рдХреА рд╡реИрд▓реНрдпреВ рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ. рд╕реНрдЯреЙрдк рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рддреМрд░ рдкрд░ рдПрдХ рд╡реИрд▓реНрдпреВ рдбрд╛рд▓рддреЗ рд╕рдордп, рдЙрд╕рдХрд╛ рд╢реБрд░реБрдЖрддреА рдкреЙрдЗрдВрдЯ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
animation-timing-function: linear(0, 0.25 75%, 1);
рдпрд╣рд╛рдВ, 0.25
рдХреА рдЖрдЙрдЯрдкреБрдЯ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ 50%
рдорд╛рд░реНрдХ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 75%
рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.
рд╕реНрдЯреЙрдк рдХреА рдЕрд╡рдзрд┐ рдХреЗ рддреМрд░ рдкрд░ рджреЛ рд╡реИрд▓реНрдпреВ рддрдп рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕реНрдЯреЙрдк рдХреЗ рд╢реБрд░реВ рдФрд░ рдЦрддреНрдо рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп, рджреЛрдиреЛрдВ рддрдп рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ:
animation-timing-function: linear(0, 0.25 25% 75%, 1);
0.25 рдХреА рдЖрдЙрдЯрдкреБрдЯ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рд╕рдордп рдХреЗ рд╕рд╛рде 25% рд╕реЗ 75% рддрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.
linear() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЬрдЯрд┐рд▓ рдХрд░реНрд╡ рдмрдирд╛рдирд╛
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг, рдЖрд╕рд╛рди рдИрдЬрд╝рд┐рдВрдЧ рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, linear()
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЬрдЯрд┐рд▓ рдИрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░, рд╕рдЯреАрдХ рдирддреАрдЬреЗ рдирд╣реАрдВ рдорд┐рд▓рддреЗ.
рдЗрд╕ рдмрд╛рдЙрдВрд╕ рдИрдЬрд╝рд┐рдВрдЧ рдХрд░реНрд╡ рдХреЛ рджреЗрдЦреЗрдВ. рдпрд╣ рдПрдХ рддрд░рд╣ рдХреА рдИрдЬрд╝рд┐рдВрдЧ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реАрдзреЗ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдЗрд╕реЗ JavaScript рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
function easing(pos) {
const t = 7.5625;
const e = 2.75;
return pos < 1 / e
? t * pos * pos
: pos < 2 / e
? t * (pos -= 1.5 / e) * pos + 0.75
: pos < 2.5 / e
? t * (pos -= 2.25 / e) * pos + 0.9375
: t * (pos -= 2.625 / e) * pos + 0.984375;
}
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд╕реЗ рдЖрдкрдХреЛ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рди рдорд┐рд▓реЗ, рд▓реЗрдХрд┐рди рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдЖрдкрдХреЛ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ. рдпрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рдХрд░реНрд╡ рдХреЗ рддреМрд░ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдХрд░реНрд╡ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдореЗрдВ рдХрдИ рд╕реНрдЯреЙрдк рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдпрд╣рд╛рдВ рд╣рд░ рд╣рд░реЗ рдмрд┐рдВрджреБ рд╕реЗ рдХрд┐рд╕реА рд╕реНрдЯреЙрдк рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ:
linear()
рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдкрд░, рдирддреАрдЬрд╛ рдПрдХ рдРрд╕рд╛ рдХрд░реНрд╡ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдХрд░реНрд╡ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдереЛрдбрд╝рд╛ рд░рдлрд╝ рд╣реЛрддрд╛ рд╣реИ.
рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рдПрдирд┐рдореЗрдЯреЗрдб рдмреЙрдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдмреЙрдХреНрд╕ рдЙрддрдирд╛ рд╕реНрдореВрдж рдирд╣реАрдВ рд╣реИ.
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╝рд░реВрд░рдд рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╕реНрдЯреЙрдк рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдореВрд▓ рдХрд░реНрд╡ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдпрд╣рд╛рдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕реНрдЯреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдирддреАрдЬреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ.
рдРрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
animation-timing-function: linear(
/* Start to 1st bounce */
0, 0.004, 0.016, 0.035, 0.063 9.1%, 0.141, 0.25, 0.391, 0.563, 0.765, 1,
/* 1st to 2nd bounce */
0.891, 0.813 45.5%, 0.785, 0.766, 0.754, 0.75, 0.754, 0.766, 0.785, 0.813 63.6%, 0.891, 1 72.7%,
/* 2nd to 3rd bounce */
0.973, 0.953, 0.941, 0.938, 0.941, 0.953, 0.973, 1,
/* 3rd bounce to end */
0.988, 0.984, 0.988, 1
);
рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЯреВрд▓
рдмрд╕ рд╕реНрдЯреЙрдк рдХреА рдпрд╣ рд╕реВрдЪреА рдореИрдиреНрдпреБрдЕрд▓ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, Jake рдФрд░ рдЖрджрдо рдиреЗ рдПрдХ рдЯреВрд▓ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдХрд┐рд╕реА рдИрдЬрд╝рд┐рдВрдЧ рдХрд░реНрд╡ рдХреЛ рдЙрд╕рдХреЗ linear()
рд╡рд░реНрд╢рди рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдпрд╣ рдЯреВрд▓, рдЗрдирдкреБрдЯ рдХреЗ рддреМрд░ рдкрд░ JavaScript рдЗрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ SVG рдХрд░реНрд╡ рд▓реЗрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, linear()
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЖрд╕рд╛рди рдХрд░реНрд╡ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ. рд╕реНрд▓рд╛рдЗрдбрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд╕реНрдЯреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреА рд╕рдЯреАрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░реЗрдВ.
рд╕рдмрд╕реЗ рдКрдкрд░ рджрд╛рдИрдВ рдУрд░, рдкреНрд░реАрд╕реЗрдЯ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рднреА рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕реНрдкреНрд░рд┐рдВрдЧ, рдмрд╛рдЙрдВрд╕, рд╕рд┐рдВрдкрд▓ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдпрд╛ рдордЯреАрд░рд┐рдпрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡.
DevTools рд╕реЗ рдЬреБрдбрд╝реА рд╕рд╣рд╛рдпрддрд╛
DevTools рдореЗрдВ, linear()
рдХреЗ рдирддреАрдЬреЗ рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ. рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЯреВрд▓рдЯрд┐рдк рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдХреЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдмрд╕ рд╕реНрдЯреЙрдк рдХреЛ рдЦреАрдВрдЪрдХрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИ.

DevTools рдХреА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛, Chrome 114 рдХреЗ рд╕рд╛рде рд╢рд┐рдк рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ DevTools рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ.
Unsplash рдкрд░ Howie Mapson рдХреА рдлрд╝реЛрдЯреЛ