@@ -128,20 +139,20 @@ function getOffsetSum(elem) {
[/pre]
@@ -154,79 +165,21 @@ document.getElementById('getBoundingClientRectEx').onclick = function(event) {

-**Именно `getCoords` всегда возвращает верное значение :).**
-
-
-
-
-### Комбинированный подход
-
-Фреймворки, которые хотят быть совместимыми со старыми браузерами, используют комбинированный подход:
-
-```js
-function getOffset(elem) {
- if (elem.getBoundingClientRect) {
- return getCoords(elem);
- } else { // старый браузер
- return getOffsetSum(elem);
- }
-}
-```
-
-[js hide="Открыть полный код getCoords/getOffsetSum"]
-function getOffsetSum(elem) {
- var top=0, left=0
- while(elem) {
- top = top + parseInt(elem.offsetTop)
- left = left + parseInt(elem.offsetLeft)
- elem = elem.offsetParent
- }
-
- return {top: top, left: left}
-}
-
-
-function getCoords(elem) {
- var box = elem.getBoundingClientRect()
-
- var body = document.body;
- var docEl = document.documentElement;
-
- var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
- var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
-
- var clientTop = docEl.clientTop || body.clientTop || 0;
- var clientLeft = docEl.clientLeft || body.clientLeft || 0;
-
- var top = box.top + scrollTop - clientTop;
- var left = box.left + scrollLeft - clientLeft;
-
- return { top: Math.round(top), left: Math.round(left) };
-}
-
-
-function getOffset(elem) {
- if (elem.getBoundingClientRect) {
- return getCoords(elem)
- } else {
- return getOffsetSum(elem)
- }
-}
-[/js]
-
+Именно `getCoords` всегда возвращает верное значение.
+[/online]
## Координаты на экране screenX/screenY
Есть ещё одна система координат, которая используется очень редко, но для полноты картины необходимо её упомянуть.
-Координаты относительно *экрана* `screenX/screenY` отсчитываются от его левого-верхнего угла. Имеется в виду именно *весь экран*, а не окно браузера.
+*Координаты относительно экрана* `screenX/screenY` отсчитываются от его левого-верхнего угла. Имеется в виду именно *весь экран*, а не окно браузера.

Такие координаты могут быть полезны, например, при работе с мобильными устройствами или для открытия нового окна посередине экрана вызовом [window.open](https://developer.mozilla.org/en-US/docs/DOM/window.open).
-- **Общая информация об экране хранится в глобальной переменной [screen](https://developer.mozilla.org/en/DOM/window.screen):**
+
- Размеры экрана хранятся в глобальной переменной [screen](https://developer.mozilla.org/en/DOM/window.screen):
```js
//+ run
@@ -240,7 +193,7 @@ alert( screen.availWidth + ' x ' + screen.availHeight);
```
-- **Координаты левого-верхнего угла браузера на экране хранятся в `window.screenX,` `window.screenY`** (не поддерживаются IE8-):
+
- Координаты левого-верхнего угла браузера на экране хранятся в `window.screenX,` `window.screenY` (не поддерживаются IE8-):
```js
//+ run
@@ -248,9 +201,10 @@ alert("Браузер находится на " + window.screenX + "," + window.
```
Они могут быть и меньше нуля, если окно частично вне экрана.
-- **Координаты *DOM-элемента* на экране получить нельзя, браузер не предоставляет свойств и методов для этого.**
+Заметим, что общую информацию об экране и браузере получить можно, а вот координаты конкретного элемента на экране -- нельзя, нет аналога `getBoundingClientRect` или иного метода для этого.
+
## Итого
У любой точки в браузере есть координаты:
@@ -260,7 +214,7 @@ alert("Браузер находится на " + window.screenX + "," + window.
Относительно экрана `screen` -- можно узнать координаты браузера, но не элемента.
-Метод `elem.getBoundingClientRect()` поддерживается IE очень давно, с версии 6, а вот версии других браузеров старше чем 2010 года (примерно), могут не иметь его. Для них (и только для них) используется подсчёт координат суммированием `offsetTop/Left`.
+Иногда в старом коде можно встретить использование `offsetTop/Left` для подсчёта координат. Это очень старый и неправильный способ, не стоит его использовать.
Координаты будут нужны нам далее, при работе с событиями мыши (координаты клика) и элементами (перемещение).
diff --git a/2-ui/1-document/20-dom-cheatsheet/article.md b/2-ui/1-document/19-dom-cheatsheet/article.md
similarity index 100%
rename from 2-ui/1-document/20-dom-cheatsheet/article.md
rename to 2-ui/1-document/19-dom-cheatsheet/article.md