diff --git a/2-ui/1-document/15-metrics/article.md b/2-ui/1-document/15-metrics/article.md index 2fdc33fc..95b74a7f 100644 --- a/2-ui/1-document/15-metrics/article.md +++ b/2-ui/1-document/15-metrics/article.md @@ -33,7 +33,7 @@ Результат выглядит так: - + Вы можете открыть [edit src="metric"]этот документ в песочнице[/edit]. @@ -64,7 +64,7 @@ Вот общая картина: - + На картинке все они с трудом помещаются, но, как мы увидим далее, их значения просты и понятны. @@ -99,7 +99,7 @@ ``` - + ## offsetWidth/Height @@ -107,7 +107,7 @@ Эти два свойства -- самые простые. Они содержат "внешнюю" ширину/высоту элемента, то есть его полный размер, включая рамки `border`. - + Для нашего элемента: - + ...Но на самом деле они -- вовсе не рамки, а отступ внутренней части элемента от внешней. @@ -162,7 +162,7 @@ function isHidden(elem) Получится так: - + ## clientWidth/Height @@ -171,7 +171,7 @@ function isHidden(elem) Они включают в себя ширину содержимого `width` вместе с полями `padding`, но без прокрутки. - + На рисунке выше посмотрим вначале на `clientHeight`, её посчитать проще всего. Прокрутки нет, так что это в точности то, что внутри рамок: CSS-ширина `200px` плюс верхнее и нижнее поля `padding` (по `20px`), итого `240px`. @@ -183,7 +183,7 @@ function isHidden(elem) **Если `padding` нет, то `clientWidth/Height` в точности равны размеру области содержимого, внутри рамок и полосы прокрутки.** - + Поэтому в тех случаях, когда мы точно знаем, что `padding` нет, их используют для определения внутренних размеров элемента. @@ -193,7 +193,7 @@ function isHidden(elem) Свойства `clientWidth/clientHeight` относятся только к видимой области элемента, а `scrollWidth/scrollHeight` добавляют к ней прокрученную (которую не видно) по горизонтали/вертикали. - + На рисунке выше: [online] -[example height=220 src="bubble-target"] +[codetabs height=220 src="bubble-target"] [/online] Возможна и ситуация, когда `event.target` и `this` -- один и тот же элемент, например если в форме нет других тегов и клик был на самом элементе `
`. ## Прекращение всплытия -Всплытие идет прямо наверх. Обычно событие будет всплывать наверх и наверх, до элемента ``, а затем до `document` и даже до `window`, вызывая все обработчики на своем пути. +Всплытие идёт прямо наверх. Обычно событие будет всплывать наверх и наверх, до элемента ``, а затем до `document`, а иногда даже до `window`, вызывая все обработчики на своем пути. **Но любой промежуточный обработчик может решить, что событие полностью обработано, и остановить всплытие.** @@ -86,7 +86,7 @@ Например, здесь при клике на кнопку обработчик `body.onclick` не сработает: ```html - + @@ -121,13 +121,7 @@ Оно гораздо менее востребовано, но иногда, очень редко, знание о нём может быть полезным. -[cut] - -## Три стадии прохода события - -Кроме всплытия, есть ещё стадии прохода события. - -В соответствии со стандартом, их три: +Строго говоря, стандарт выделяет целых три стадии прохода события:
  1. Событие сначала идет сверху вниз. Эта стадия называется *"стадия перехвата"* (capturing stage).
  2. @@ -143,9 +137,9 @@ **Ранее мы говорили только о всплытии, потому что другие стадии, как правило, не используются и проходят незаметно для нас.** -Обработчики, добавленные через `on...`, ничего не знают о стадии перехвата, а начинают работать со всплытия. +Обработчики, добавленные через `on...`-свойство, ничего не знают о стадии перехвата, а начинают работать со всплытия. -**Чтобы поймать событие на стадии перехвата, нужно использовать третий аргумент `addEventListener`:** +Чтобы поймать событие на стадии перехвата, нужно использовать третий аргумент `addEventListener`: