You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 7-animation/1-bezier-curve/article.md
+7-4Lines changed: 7 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,16 @@
1
+
1
2
# Кривые Безье
2
3
3
4
Кривые Безье используются в компьютерной графике для рисования плавных изгибов, в CSS-анимации и много где ещё.
4
5
5
6
Это очень простая вещь, которую стоит изучить один раз, а затем чувствовать себя комфортно в мире векторной графики и продвинутых анимаций.
6
7
8
+
```smart header="Немного теории"
9
+
Эта статья даёт теоретическое, но очень необходимое представление о том, что такое кривые Безье, в то время как [следующая](info:css-animations#bezier-curve) показывает, как мы можем использовать их для CSS-анимаций.
10
+
11
+
Пожалуйста, найдите время, чтобы прочитать и понять концепцию, это сослужит вам хорошую службу.
4. На получившемся <spanstyle="color:#167490">синем</span> отрезке берётся точка на расстоянии, соответствующем `t`. То есть, для `t=0.25` (левый рисунок) получаем точку в конце первой четверти отрезка, для `t=0.5` (правый рисунок) – в середине отрезка. На рисунках выше эта точка отмечена <spanstyle="color:red">красным</span>.
79
84
80
85
5. По мере того, как `t` "пробегает" последовательность от `0` до `1`, каждое значение `t` добавляет к кривой точку. Совокупность таких точек для всех значений образует кривую Безье. Она <spanstyle="color:red">красная</span> и имеет параболическую форму на картинках выше.
@@ -109,7 +114,6 @@
109
114
**Запускайте и приостанавливайте примеры, чтобы ясно увидеть отрезки и то, как строится кривая.**
Для таких кривых существуют математические формулы, например, [полином Лагранжа](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD_%D0%9B%D0%B0%D0%B3%D1%80%D0%B0%D0%BD%D0%B6%D0%B0). В компьютерной графике [сплайн-интерполяция](https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BF%D0%BB%D0%B0%D0%B9%D0%BD) часто используется для построения плавных кривых, соединяющих множество точек.
141
145
```
142
146
143
-
144
147
## Математика
145
148
146
149
Кривая Безье может быть описана с помощью математической формулы.
Copy file name to clipboardExpand all lines: 7-animation/2-css-animations/article.md
+34-11Lines changed: 34 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,3 +1,4 @@
1
+
1
2
# CSS-анимации
2
3
3
4
CSS позволяет создавать простые анимации без использования JavaScript.
@@ -187,6 +188,7 @@ stripe.onclick = function() {
187
188
[codetabs src="train"]
188
189
189
190
CSS:
191
+
190
192
```css
191
193
.train {
192
194
left: 0;
@@ -254,7 +256,14 @@ CSS:
254
256
255
257
Это, конечно, "мягкий" вариант. Если значение `y` будут `-99` и `99`, то поезд будет гораздо сильнее "выпрыгивать" за пределы.
256
258
257
-
Как сделать кривую Безье необходимую для конкретной задачи? Существует множество инструментов, например можно использовать с сайта <https://cubic-bezier.com/>.
259
+
Как сделать кривую Безье необходимую для конкретной задачи? Существует множество инструментов.
260
+
261
+
- К примеру, мы можем сделать это на сайте <https://cubic-bezier.com>.
262
+
- Браузернные инструменты разработчика также имеют специальную поддержку для создания кривых Безье в CSS:
263
+
1. Откройте инструменты разработчика при помощи `key:F12` (Mac: `key:Cmd+Opt+I`).
264
+
2. Выберете вкладку `Elements`, затем обратите внимание на под-панель `Styles` в правой стороне.
265
+
3. Свойства CSS со словом `cubic-bezier` будут иметь иконку перед этим словом.
266
+
4. Кликните по иконке, чтобы отредактировать кривую.
258
267
259
268
### Шаги
260
269
@@ -266,7 +275,19 @@ CSS:
266
275
267
276
[codetabs src="step-list"]
268
277
269
-
Давайте сделаем так, чтобы цифры двигались не плавно, а появлялись одна за другой раздельно. Для этого скроем все что находится за красным "окошком" и будем сдвигать список влево по шагам.
278
+
В HTML, вереница цифр заключена в `<div id="digits">` фиксированной длины:
279
+
280
+
```html
281
+
<divid="digit">
282
+
<divid="stripe">0123456789</div>
283
+
</div>
284
+
```
285
+
286
+
Div-элемент `#digit` имеет фиксированную ширину и границу, поэтому он выглядит как красное окно.
287
+
288
+
Мы сделаем таймер: цифры будут появляться одна за другой, дискретно.
289
+
290
+
Чтобы добиться этого, мы скроем `#stripe` за пределами `#digit`, используя `overflow: hidden`, а затем, шаг за шагом будем сдвигать `#stripe` влево.
270
291
271
292
Всего будет 9 шагов, один шаг для каждой цифры:
272
293
@@ -277,17 +298,17 @@ CSS:
277
298
}
278
299
```
279
300
280
-
В действии:
281
-
282
-
[codetabs src="step"]
283
-
284
301
Первый аргумент временной функции `steps(9, start)` -- количество шагов. Трансформация будет разделена на 9 частей (10% каждая). Временной интервал также будет разделён на 9 частей, таким образом свойство `transition: 9s` обеспечивает нам 9 секунд анимации, что даёт по одной секунде на цифру.
285
302
286
303
Вторым аргументом является одно из ключевых слов: `start` или `end`.
287
304
288
305
`start` -- означает, что в начале анимации нам необходимо перейти на первый шаг немедленно.
289
306
290
-
Мы можем наблюдать это во время анимации: когда пользователь нажимает на цифру, значение меняется на `1` (первый шаг) сразу и в следующий раз меняется уже в начале следующей секунды.
307
+
В действии:
308
+
309
+
[codetabs src="step"]
310
+
311
+
Щелчок по цифре немедленно изменяет её на `1` (первый шаг), а затем изменяется в начале следующей секунды.
291
312
292
313
Анимация будет происходить так:
293
314
@@ -297,6 +318,8 @@ CSS:
297
318
-`8s` -- `-90%`
298
319
- (на протяжении последней секунды отображается последнее значение).
299
320
321
+
Здесь первое изменение было немедленным из-за `start` в `steps`.
322
+
300
323
Альтернативное значение `end` означало бы, что изменения нужно применять не в начале, а в конце каждой секунды.
301
324
302
325
Анимация будет происходить так:
@@ -307,18 +330,18 @@ CSS:
307
330
- ...
308
331
-`9s` -- `-90%`
309
332
310
-
Пример `step(9, end)` в действии (обратите внимание на паузу между первым изменением цифр):
333
+
Пример `step(9, end)` в действии (обратите внимание на паузу перед первым изменением цифры):
311
334
312
335
[codetabs src="step-end"]
313
336
314
-
Также есть сокращённые значения:
337
+
Существуют также некоторые заранее определённые сокращения для `steps(...)`:
315
338
316
339
-`step-start` -- то же самое, что `steps(1, start)`. Оно означает, что анимация начнётся сразу и произойдёт в один шаг. Таким образом она начнётся и завершится сразу, как будто и нет никакой анимации.
317
340
-`step-end` -- то же самое, что `steps(1, end)`: выполнит анимацию за один шаг в конце `transition-duration`.
318
341
319
-
Такие значения используются редко, потому что это не совсем анимация, а точнее будет сказать одношаговые изменения.
342
+
Такие значения используются редко, потому что это не совсем анимация, а точнее будет сказать одношаговые изменения. Мы упоминаем их здесь для полноты картины.
320
343
321
-
## Событиеtransitionend
344
+
## Событие: "transitionend"
322
345
323
346
Когда завершается анимация, срабатывает событие `transitionend`.
0 commit comments