diff --git a/1-js/2-first-steps/5-variables/variable-change.svg b/1-js/2-first-steps/5-variables/variable-change.svg
index b28c49be..472eb447 100644
--- a/1-js/2-first-steps/5-variables/variable-change.svg
+++ b/1-js/2-first-steps/5-variables/variable-change.svg
@@ -11,13 +11,13 @@
-
+ "World!"
-
+ "Hello!"
diff --git a/1-js/2-first-steps/5-variables/variable.svg b/1-js/2-first-steps/5-variables/variable.svg
index 44fa8557..2199e553 100644
--- a/1-js/2-first-steps/5-variables/variable.svg
+++ b/1-js/2-first-steps/5-variables/variable.svg
@@ -12,7 +12,7 @@
-
+ "Hello!"
diff --git a/1-js/3-writing-js/2-coding-style/code-style.svg b/1-js/3-writing-js/2-coding-style/code-style.svg
index 85eaf5f2..4eeecc6c 100644
--- a/1-js/3-writing-js/2-coding-style/code-style.svg
+++ b/1-js/3-writing-js/2-coding-style/code-style.svg
@@ -22,65 +22,65 @@
Между именем функциии скобкой ( нет пробела
-
-
+
+ Отступ 2 пробела
-
-
+
+ Пробел после for
-
-
+
+ } else { без перевода строки
-
-
+
+ Пробелы вокругвложенного вызова
-
-
-
-
+
+
+
+ пустая строкамежду логическими блоками
-
-
+
+ длина строкине более 80 символов
-
-
+
+ точка с запятой ;обязательна
-
-
+
+ Фигурная скобка {на той же строке, через пробел
-
-
-
-
+
+
+
+ Пробел между параметрами
-
-
+
+ Пробел между параметрами
diff --git a/1-js/4-data-structures/4-object/object-person-empty.svg b/1-js/4-data-structures/4-object/object-person-empty.svg
index 20b239c9..29ef8bf6 100644
--- a/1-js/4-data-structures/4-object/object-person-empty.svg
+++ b/1-js/4-data-structures/4-object/object-person-empty.svg
@@ -13,8 +13,8 @@
person
-
-
+
+
\ No newline at end of file
diff --git a/1-js/4-data-structures/6-object-reference/variable-copy-value.svg b/1-js/4-data-structures/6-object-reference/variable-copy-value.svg
index f28a7c20..8892af98 100644
--- a/1-js/4-data-structures/6-object-reference/variable-copy-value.svg
+++ b/1-js/4-data-structures/6-object-reference/variable-copy-value.svg
@@ -12,7 +12,7 @@
-
+ "Привет!"
@@ -27,7 +27,7 @@
-
+ "Привет!"
diff --git a/1-js/4-data-structures/7-array/array-speed.svg b/1-js/4-data-structures/7-array/array-speed.svg
index d6d5b45f..227243c6 100644
--- a/1-js/4-data-structures/7-array/array-speed.svg
+++ b/1-js/4-data-structures/7-array/array-speed.svg
@@ -8,18 +8,18 @@
-
+ 0
-
+ 1
-
+ 2
-
+ 3
diff --git a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
index 5756498b..cb49665d 100644
--- a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
+++ b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
@@ -13,8 +13,8 @@
1
-
-
+
+ next
@@ -25,8 +25,8 @@
2
-
-
+
+ next
@@ -37,8 +37,8 @@
3
-
-
+
+ next
@@ -49,8 +49,8 @@
4
-
-
+
+ next
diff --git a/1-js/4-data-structures/9-array-iteration/reduce.svg b/1-js/4-data-structures/9-array-iteration/reduce.svg
index 0c48980e..aadaaeae 100644
--- a/1-js/4-data-structures/9-array-iteration/reduce.svg
+++ b/1-js/4-data-structures/9-array-iteration/reduce.svg
@@ -56,8 +56,8 @@
current5
-
-
+
+ 0+1+2+3+4+5 = 15
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-family.svg b/1-js/5-functions-closures/6-memory-management/family-no-family.svg
index 57f9ef73..8a6b18b5 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-family.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-family.svg
@@ -6,8 +6,8 @@
-
-
+
+ window
@@ -42,15 +42,15 @@
Object
-
-
-
-
+
+
+
+ husband
-
-
+
+ family: null
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg b/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
index 82b1993a..19f25a06 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
@@ -30,10 +30,10 @@
Object
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father.svg b/1-js/5-functions-closures/6-memory-management/family-no-father.svg
index f26e7e8f..3225b007 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-father.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-father.svg
@@ -40,12 +40,12 @@
Object
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/1-js/5-functions-closures/6-memory-management/family.svg b/1-js/5-functions-closures/6-memory-management/family.svg
index 80f53e05..0f34310c 100644
--- a/1-js/5-functions-closures/6-memory-management/family.svg
+++ b/1-js/5-functions-closures/6-memory-management/family.svg
@@ -6,8 +6,8 @@
-
-
+
+ window
@@ -45,17 +45,17 @@
Object
-
-
-
-
-
-
+
+
+
+
+
+ husband
-
-
+
+
\ No newline at end of file
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.svg b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.svg
index 820dc80e..aa5e3ab9 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.svg
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.svg
@@ -11,19 +11,19 @@
func(1)
-
+ func(2)
-
+ func(3)
-
+ 100
diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.svg b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.svg
index 512dbf7e..f0895fed 100644
--- a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.svg
+++ b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.svg
@@ -11,19 +11,19 @@
func(1)
-
+ func(2)
-
+ func(3)
-
+
@@ -33,16 +33,16 @@
100
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
index d6bf194d..5acdf9e3 100644
--- a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
+++ b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
@@ -20,8 +20,8 @@
rabbit
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
index 998745f2..4ad00ffa 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
@@ -23,13 +23,13 @@
Object.prototype
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
index f4dc1d90..b24345b7 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
@@ -14,13 +14,13 @@
Object.prototype
-
-
+
+ __proto__
-
-
+
+ null
@@ -57,10 +57,10 @@
__proto__
-
-
-
-
+
+
+
+ [1, 2, 3]
@@ -75,18 +75,18 @@
5
-
-
+
+ __proto__
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
index 898b906e..8b9d9fef 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
@@ -18,13 +18,13 @@
obj
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
index 8de1c1cd..731ad706 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
@@ -26,13 +26,13 @@
Object.prototype
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
index 7beab7e7..77f4dc66 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
@@ -25,13 +25,13 @@
Animal.prototype
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
index ccfa42d6..3a6bcf7e 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
@@ -27,13 +27,13 @@
Animal.prototype
-
-
+
+ __proto__
-
-
+
+ __proto__
diff --git a/10-regular-expressions-javascript/1-regexp-introduction/article.md b/10-regular-expressions-javascript/1-regexp-introduction/article.md
index 28a288b5..cce32c4e 100644
--- a/10-regular-expressions-javascript/1-regexp-introduction/article.md
+++ b/10-regular-expressions-javascript/1-regexp-introduction/article.md
@@ -15,20 +15,20 @@
var regexp = new RegExp("шаблон", "флаги");
```
-Как правило, используют более короткую запись через слеши `/`:
+Как правило, используют более короткую запись: шаблон внутри слешей `"/"`:
```js
var regexp = /шаблон/; // без флагов
var regexp = /шаблон/gmi; // с флагами gmi (изучим их дальше)
```
-Слэши `'/'` говорят JavaScript о том, что это регулярное выражение. Они играют здесь ту же роль, что и кавычки для обозначения строк.
+Слэши `"/"` говорят JavaScript о том, что это регулярное выражение. Они играют здесь ту же роль, что и кавычки для обозначения строк.
## Использование
Основа регулярного выражения -- паттерн. Это строка, которую можно расширить специальными символами, которые делают поиск намного мощнее.
-Если флагов и специальных символов нет, то поиск по паттерну -- то же самое, что и обычный поиск подстроки:
+В простейшем случае, если флагов и специальных символов нет, поиск по паттерну -- то же самое, что и обычный поиск подстроки:
```js
//+ run
@@ -48,7 +48,9 @@ var substr = "лю";
alert( str.indexOf(substr) ); // 2
```
-Как видим, то же самое, разве что для регэкспа использован метод [:String#search(reg)], а для строки [:String#indexOf(substr)]. Но это соответствие лишь кажущееся. Очень скоро мы усложним регулярные выражения, и тогда появятся отличия.
+Как видим, то же самое, разве что для регэкспа использован метод [search](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/search) -- он как раз работает с регулярными выражениями, а для подстроки -- [indexOf](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf).
+
+Но это соответствие лишь кажущееся. Очень скоро мы усложним регулярные выражения, и тогда увидим, что они гораздо мощнее.
[smart header="Цветовые обозначения"]
Здесь и далее используется следующая цветовая схема:
diff --git a/2-ui/1-document/16-metrics-window/document-client-width-height.svg b/2-ui/1-document/16-metrics-window/document-client-width-height.svg
index b88a533f..bf16af6c 100644
--- a/2-ui/1-document/16-metrics-window/document-client-width-height.svg
+++ b/2-ui/1-document/16-metrics-window/document-client-width-height.svg
@@ -22,12 +22,12 @@
document.documentElement.clientWidth
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2-ui/1-document/17-coordinates/coords.svg b/2-ui/1-document/17-coordinates/coords.svg
index a86d910c..f91fe800 100644
--- a/2-ui/1-document/17-coordinates/coords.svg
+++ b/2-ui/1-document/17-coordinates/coords.svg
@@ -33,18 +33,18 @@
right
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2-ui/1-document/4-traversing-dom/dom-links-elements.svg b/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
index 104c271c..7fc062fe 100644
--- a/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
+++ b/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
@@ -26,17 +26,17 @@
<DIV>
-
-
-
-
+
+
+
+ nextElementSibling
-
-
+
+ previousElement
diff --git a/2-ui/1-document/4-traversing-dom/dom-links.svg b/2-ui/1-document/4-traversing-dom/dom-links.svg
index c3e1cb78..2a5be39f 100644
--- a/2-ui/1-document/4-traversing-dom/dom-links.svg
+++ b/2-ui/1-document/4-traversing-dom/dom-links.svg
@@ -31,15 +31,15 @@
<DIV>
-
-
-
-
+
+
+
+ nextSibling
-
-
+
+ previousSibling
diff --git a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.svg b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.svg
index 4a1fbbaf..14715f8a 100644
--- a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.svg
+++ b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.svg
@@ -19,9 +19,9 @@
3
-
- Самый глубокий
- элемент
+
+ Самый глубокий
+ элемент
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.svg
index 59fc73bb..fe29eca4 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.svg
@@ -18,7 +18,7 @@
#TO
-
+ target
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
index 9ff425b1..d9e9fad1 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
@@ -26,7 +26,7 @@
<DIV>
-
+ mouseover
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
index 958e581f..8498bf2f 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
@@ -10,11 +10,11 @@
<DIV>
-
+ mouseover
-
+ mouseoout
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
index cd1569de..5a8f9f00 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
@@ -14,7 +14,7 @@
#TO
-
+ mouseover
diff --git a/4-ajax/4-xhr-forms/article.md b/4-ajax/4-xhr-forms/article.md
index e0059aaf..e54b8d90 100644
--- a/4-ajax/4-xhr-forms/article.md
+++ b/4-ajax/4-xhr-forms/article.md
@@ -48,10 +48,7 @@ alert( encodeURIComponent('В') ); // %D0%92
alert( encodeURIComponent('Виктор') ); // %D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80
```
-Формы с `method="GET"` всегда кодируются указанным образом.
-
-Для `method="POST"` существует альтернативная кодировка, которую мы рассмотрим позже.
-
+Эта кодировка используется в основном для метода GET, то есть для передачи параметра в строке запроса. По стандарту строка запроса не может содержать произвольные Unicode-символы, поэтому они кодируются как показано выше.
## GET-запрос
@@ -92,11 +89,23 @@ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
## POST с urlencoded
-В методе POST параметры передаются не в URL, а в теле, посылаемом через `send(body)`. Поэтому `params` нужно указывать не в `open`, а в `send`.
+В методе POST параметры передаются не в URL, а в теле запроса. Оно указывается в вызове `send(body)`.
-Кроме того, при POST обязателен заголовок `Content-Type`, содержащий кодировку. Это указание для сервера -- как обрабатывать (раскодировать) пришедший запрос.
+В стандартных HTTP-формах для метода POST доступны [три кодировки](https://html.spec.whatwg.org/multipage/forms.html#submit-body), задаваемые через атрибут `enctype`:
+
+
`application/x-www-form-urlencoded`
+
`multipart/form-data`
+
`text-plain`
+
+
+В зависимости от `enctype` браузер кодирует данные соответствующим способом перед отправкой на сервер.
+
+В случае с `XMLHttpRequest` мы, вообще говоря, не обязаны использовать ни один из этих способов. Главное, чтобы сервер наш запрос понял. Но обычно проще всего выбрать какой-то из стандартных.
+
+В частности, при POST обязателен заголовок `Content-Type`, содержащий кодировку. Это указание для сервера -- как обрабатывать (раскодировать) пришедший запрос.
+
+Для примера отправим запрос в кодировке `application/x-www-form-urlencoded`:
-Полный код для POST:
```js
var xhr = new XMLHttpRequest();
diff --git a/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg b/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
index ee815012..7a11b490 100644
--- a/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
+++ b/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
@@ -21,13 +21,13 @@
-
-
+
+ send()
-
-
+
+ HTTP-запросс заголовком Origin
diff --git a/4-ajax/5-xhr-crossdomain/xhr-preflight.svg b/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
index 687a5c18..86d951d4 100644
--- a/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
+++ b/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
@@ -21,8 +21,8 @@
-
-
+
+ send()
@@ -32,8 +32,8 @@
Access-Control-Request-MethodAccess-Control-Request-Headers
-
-
+
+ 200 OKAccess-Control-Allow-Method
@@ -41,8 +41,8 @@
Access-Control-Max-Age
-
-
+
+
@@ -56,8 +56,8 @@
если сервер разрешил: onloadиначе onerror
-
-
+
+ Основной HTTP-запросOrigin
diff --git a/5-animation/1-bezier/article.md b/5-animation/1-bezier/article.md
index 5d7cf395..13c91881 100644
--- a/5-animation/1-bezier/article.md
+++ b/5-animation/1-bezier/article.md
@@ -4,9 +4,8 @@
Несмотря на "умное" название -- это очень простая штука.
-В принципе, можно создавать анимацию и без знания кривых Безье, но стоит один раз прочитать, что это такое, так как в векторной графике и продвинутых анимаций без них никак. Это образовательный минимум.
+В принципе, можно создавать анимацию и без знания кривых Безье, но стоит один раз изучить эту тему хотя бы для того, чтобы в дальнейшем с комфортом пользоваться этим замечательным инструментом. Тем более что в мире векторной графики и продвинутых анимаций без них никак.
-Тему эту стоит изучить один раз, чтобы в дальнейшем с комфортом пользоваться этим замечательным инструментом.
[cut]
## Виды кривых Безье
@@ -17,15 +16,15 @@
По двум точкам:
-
+
По трём точкам:
-
+
По четырём точкам:
-
+
Если вы посмотрите внимательно на эти кривые, то "на глазок" заметите:
@@ -35,7 +34,7 @@
Для двух точек -- это линейная кривая (т.е. прямая), для трёх точек -- квадратическая кривая (парабола), для четырёх -- кубическая.
**Кривая всегда находится внутри [выпуклой оболочки](http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0), образованной опорными точками:**
-
+
Благодаря последнему свойству в компьютерной графике можно оптимизировать проверку пересечений двух кривых. Если их выпуклые оболочки не пересекаются, то и кривые тоже не пересекутся.
@@ -53,7 +52,7 @@
Вот некоторые примеры:
-
+
## Математика
@@ -122,8 +121,8 @@
При `t=0.25`
При `t=0.5`
-
-
+
+
@@ -136,7 +135,8 @@
По мере того как `t` пробегает последовательность от `0` до `1`, каждое значение `t` добавляет к кривой точку. **Совокупность таких точек для всех значений `t` образуют кривую Безье.**
-**Это был процесс для построения по трём точкам. Но то же самое происходит и с четырьмя точками.**
+
+Это был процесс для построения по трём точкам. Но то же самое происходит и с четырьмя точками.
Демо для четырёх точек (точки можно двигать):
@@ -173,15 +173,18 @@
Аналогичным образом могут быть построены кривые Безье и более высокого порядка: по пяти точкам, шести и так далее. Но обычно используются 2-3 точки, а для сложных линий несколько кривых соединяются. Это гораздо проще с точки зрения поддержки и расчётов.
[smart header="Как провести кривую Безье через нужные точки?"]
-Кривые Безье обычно проводятся через "опорные" точки, которые, как можно видеть из примеров выше, редко лежат на кривой.
+Кривые Безье обычно проводятся при помощи "опорных" точек, из которых, как можно видеть из примеров выше, только первая и последняя лежат на кривой.
-Если нужно провести кривую именно через нужные точки, то это уже другая задача. Она называется [интерполяцией](http://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%D1%8F). Существуют математические формулы, которые подбирают коэффициенты кривой по точкам, исходя из требований, например [многочлен Лагранжа](http://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).
+Если нужно провести кривую именно *через* нужные точки, то это уже другая задача, она называется [интерполяцией](http://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%D1%8F). Существуют математические формулы, которые подбирают коэффициенты кривой по точкам, исходя из требований, например [многочлен Лагранжа](http://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).
-Как правило, в компьютерной графике для интерполяции используют кубические кривые, соединённых гладким образом. Вместе они выглядят как одна кривая. Это называется [интерполяция сплайнами](http://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).
+Как правило, в компьютерной графике для интерполяции используют кубические кривые, соединённых гладким образом. Вместе они выглядят как одна кривая. Это называется [интерполяция сплайнами](http://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).
[/smart]
+
## Итого
-Кривые Безье задаются опорными точками. Мы рассмотрели два определения кривых:
+Кривые Безье задаются опорными точками.
+
+Мы рассмотрели два определения кривых:
Через математическую формулу.
Через процесс построения де Кастельжо.
@@ -197,6 +200,6 @@
В компьютерной графике, моделировании, в графических редакторах. Шрифты описываются с помощью кривых Безье.
-
В веб-разработке -- для графики на Canvas или в формате SVG. Кстати, все живые примеры выше написаны на SVG. Фактически, это один SVG-документ, к которому точки передаются параметрами. Вы можете открыть его в отдельном окне и посмотреть исходник: demo.svg.
-
В CSS-анимации, для задания траектории и скорости передвижения.
+
В веб-разработке -- для графики на Canvas или в формате SVG. Кстати, все живые примеры выше написаны на SVG. Фактически, это один SVG-документ, к которому точки передаются параметрами. Вы можете открыть его в отдельном окне и посмотреть исходник: [demo.svg](demo.svg?p=0,0,1,0.5,0,0.5,1,1&animate=1).
+
В CSS-анимации, для задания траектории или скорости передвижения.
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier-car.svg b/5-animation/1-bezier/bezier-car.svg
new file mode 100644
index 00000000..58061706
--- /dev/null
+++ b/5-animation/1-bezier/bezier-car.svg
@@ -0,0 +1,32 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier-letter.svg b/5-animation/1-bezier/bezier-letter.svg
new file mode 100644
index 00000000..58e3fbfd
--- /dev/null
+++ b/5-animation/1-bezier/bezier-letter.svg
@@ -0,0 +1,50 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier-vase.svg b/5-animation/1-bezier/bezier-vase.svg
new file mode 100644
index 00000000..6030a745
--- /dev/null
+++ b/5-animation/1-bezier/bezier-vase.svg
@@ -0,0 +1,49 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier2.png b/5-animation/1-bezier/bezier2.png
deleted file mode 100644
index 4e26747b..00000000
Binary files a/5-animation/1-bezier/bezier2.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier2.svg b/5-animation/1-bezier/bezier2.svg
new file mode 100644
index 00000000..0b0f99a6
--- /dev/null
+++ b/5-animation/1-bezier/bezier2.svg
@@ -0,0 +1,20 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier3-draw1.png b/5-animation/1-bezier/bezier3-draw1.png
deleted file mode 100644
index 10ce7f99..00000000
Binary files a/5-animation/1-bezier/bezier3-draw1.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier3-draw1.svg b/5-animation/1-bezier/bezier3-draw1.svg
new file mode 100644
index 00000000..9051e0ca
--- /dev/null
+++ b/5-animation/1-bezier/bezier3-draw1.svg
@@ -0,0 +1,37 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier3-draw2.png b/5-animation/1-bezier/bezier3-draw2.png
deleted file mode 100644
index b1226656..00000000
Binary files a/5-animation/1-bezier/bezier3-draw2.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier3-draw2.svg b/5-animation/1-bezier/bezier3-draw2.svg
new file mode 100644
index 00000000..dd762b32
--- /dev/null
+++ b/5-animation/1-bezier/bezier3-draw2.svg
@@ -0,0 +1,38 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier3-e.png b/5-animation/1-bezier/bezier3-e.png
deleted file mode 100644
index 7e0f8804..00000000
Binary files a/5-animation/1-bezier/bezier3-e.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier3-e.svg b/5-animation/1-bezier/bezier3-e.svg
new file mode 100644
index 00000000..79e31532
--- /dev/null
+++ b/5-animation/1-bezier/bezier3-e.svg
@@ -0,0 +1,25 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier3.png b/5-animation/1-bezier/bezier3.png
deleted file mode 100644
index 3991122c..00000000
Binary files a/5-animation/1-bezier/bezier3.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier3.svg b/5-animation/1-bezier/bezier3.svg
new file mode 100644
index 00000000..5ac329b5
--- /dev/null
+++ b/5-animation/1-bezier/bezier3.svg
@@ -0,0 +1,24 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier4-e.png b/5-animation/1-bezier/bezier4-e.png
deleted file mode 100644
index a664b520..00000000
Binary files a/5-animation/1-bezier/bezier4-e.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier4-e.svg b/5-animation/1-bezier/bezier4-e.svg
new file mode 100644
index 00000000..562d06c6
--- /dev/null
+++ b/5-animation/1-bezier/bezier4-e.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/bezier4.png b/5-animation/1-bezier/bezier4.png
deleted file mode 100644
index a5ac0cfd..00000000
Binary files a/5-animation/1-bezier/bezier4.png and /dev/null differ
diff --git a/5-animation/1-bezier/bezier4.svg b/5-animation/1-bezier/bezier4.svg
new file mode 100644
index 00000000..f60ba3e5
--- /dev/null
+++ b/5-animation/1-bezier/bezier4.svg
@@ -0,0 +1,28 @@
+
+
\ No newline at end of file
diff --git a/5-animation/1-bezier/car.jpg b/5-animation/1-bezier/car.jpg
deleted file mode 100644
index 8940f17a..00000000
Binary files a/5-animation/1-bezier/car.jpg and /dev/null differ
diff --git a/5-animation/1-bezier/letter_m.png b/5-animation/1-bezier/letter_m.png
deleted file mode 100644
index ba104a9a..00000000
Binary files a/5-animation/1-bezier/letter_m.png and /dev/null differ
diff --git a/5-animation/1-bezier/pause.png b/5-animation/1-bezier/pause.png
new file mode 100644
index 00000000..4d46cebb
Binary files /dev/null and b/5-animation/1-bezier/pause.png differ
diff --git a/5-animation/1-bezier/vase.png b/5-animation/1-bezier/vase.png
deleted file mode 100644
index da8f06e9..00000000
Binary files a/5-animation/1-bezier/vase.png and /dev/null differ
diff --git a/5-animation/2-css-transitions/1-animate-logo-css/solution.md b/5-animation/2-css-transitions/1-animate-logo-css/solution.md
index 9f5ed693..ff52c5b0 100644
--- a/5-animation/2-css-transitions/1-animate-logo-css/solution.md
+++ b/5-animation/2-css-transitions/1-animate-logo-css/solution.md
@@ -1,28 +1,16 @@
-# Алгоритм
-
-Анимируйте одновременно свойства `left/top` и `width/height`.
-
-Чтобы в процессе анимации таблица сохраняла геометрию -- создайте на месте `IMG` временный `DIV` фиксированного размера и переместите `IMG` внутрь него. После анимации можно вернуть как было.
-
-Для начала анимации - добавьте класс изображению:
+CSS-код для анимации одновременно `width` и `height`:
```css
-.growing {
- /* все свойства анимируются 3 секунды */
- -webkit-transition: all 3s;
- -moz-transition: all 3s;
- -o-transition: all 3s;
- -ms-transition: all 3s;
+/* исходный класс */
+#flyjet {
+ transition: all 3s;
+}
+
+/* JS добавляет .growing *.
+#flyjet.growing {
+ width: 400px;
+ height: 240px;
}
```
-При этом, чтобы анимация началась, может понадобиться отложить установку класса и новых свойств через `setTimeout(.., 0)`.
-
-Для отлова конца анимации используйте событие `onTransitionEnd`. Оно сработает несколько раз, для каждого свойства, поэтому чтобы обработчик не вывел "OK" много раз -- можно обрабатывать окончание только при одном `event.propertyName`.
-
-# Похожая задача
-Аналогичная задача, решённая средствами JS: [](/task/animate-logo).
-
-# Решение
-
-[edit src="solution" task/]
\ No newline at end of file
+Небольшая тонкость с окончанием анимации. Соответствующее событие `transitionend` сработает два раза -- по одному для каждого свойства. Поэтому, если не предпринять дополнительных шагов, сообщение из обработчика может быть выведено 2 раза.
diff --git a/5-animation/2-css-transitions/1-animate-logo-css/solution.view/index.html b/5-animation/2-css-transitions/1-animate-logo-css/solution.view/index.html
index 5190775c..3481cf54 100644
--- a/5-animation/2-css-transitions/1-animate-logo-css/solution.view/index.html
+++ b/5-animation/2-css-transitions/1-animate-logo-css/solution.view/index.html
@@ -2,38 +2,15 @@
-
+
+
+
-Кликните картинку для анимации. Расположение элементов при анимации не должно меняться!
-
-
-
Догнать
-
-
-
..и перегнать!
-
-
+
-В процессе анимации повторные нажатия на изображение игнорируются.
-
-
-
-
-
+