Skip to content

Commit 87eab0e

Browse files
authored
Merge pull request #536 from ltlaitoff/2-1.10-size-and-scroll-window
fix(2-1.10): Review `Window sizes and scrolling` article
2 parents 817d5cf + 3768fc6 commit 87eab0e

File tree

1 file changed

+20
-24
lines changed
  • 2-ui/1-document/10-size-and-scroll-window

1 file changed

+20
-24
lines changed

2-ui/1-document/10-size-and-scroll-window/article.md

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## Ширина/висота вікна
88

9-
Щоб отримати ширину та висоту вікна, ми можемо використовувати `clientWidth/clientHeight` із `document.documentElement`:
9+
Щоб отримати ширину та висоту вікна, ми можемо використовувати `clientWidth/clientHeight` з `document.documentElement`:
1010

1111
![](document-client-width-height.svg)
1212

@@ -17,34 +17,32 @@
1717
```
1818

1919
````warn header="Не `window.innerWidth/innerHeight`"
20-
Браузери також підтримують властивості `window.innerWidth/innerHeight`. Здається, це те, що нам потрібно, то чому б їх не використати?
20+
Браузери також підтримують властивості `window.innerWidth/innerHeight`. Начебто схоже на те, що нам потрібно. Чому б їх не використати?
2121

2222
Якщо є смуга прокрутки, і вона займає деякий простір, то властивості `clientWidth/clientHeight` нададуть ширину/висоту без прокрутки (віднявши її). Інакше кажучи, вони повертають ширину/висоту видимої частини документа, доступної для вмісту.
2323

24-
`window.innerWidth/innerHeight` включає смугу прокрутки.
24+
А `window.innerWidth/innerHeight` включають смугу прокрутки.
2525

26-
Якщо є смуга прокрутки, і вона займає деякий простір, то ці два рядки покажуть різні значення:
26+
Якщо є смуга прокрутки та вона займає деякий простір, то ці два рядки покажуть різні значення:
2727
```js run
2828
alert( window.innerWidth ); // повна ширина вікна
2929
alert( document.documentElement.clientWidth ); // ширина вікна мінус смуга прокрутки
3030
```
3131

32-
У більшості випадків нам потрібна *доступна* ширина вікна, щоб намалювати або розташувати щось у межах смуг прокрутки (якщо такі є), тому ми повинні використовувати `documentElement.clientHeight/clientWidth`.
33-
````
32+
У більшості випадків нам потрібна *доступна* ширина вікна без смуги прокрутки, щоб намалювати або розташувати щось. Тому ми маємо використовувати `documentElement.clientHeight/clientWidth`.
3433

3534
```warn header="`DOCTYPE` важливий"
3635
Зверніть увагу: геометричні властивості верхнього рівня можуть працювати дещо інакше, якщо в HTML немає `<!DOCTYPE HTML>`. Можливі дивні речі.
3736

38-
У сучасному HTML ми завжди повинні прописувати `DOCTYPE`.
39-
```
37+
У сучасному HTML ми завжди повинні вказувати `DOCTYPE`.
4038

4139
## Ширина/висота документа
4240

4341
Теоретично, оскільки кореневим елементом документа є `document.documentElement`, і він охоплює весь вміст, ми можемо виміряти повний розмір документа як `document.documentElement.scrollWidth/scrollHeight`.
4442

45-
Але для цього елемента для всієї сторінки ці властивості не працюють належним чином. У Chrome/Safari/Opera, якщо немає прокрутки, то `documentElement.scrollHeight` може бути навіть меншим, ніж `documentElement.clientHeight`! Дивно, правда?
43+
Але для цього елемента для всієї сторінки ці властивості не працюють належним чином. У Chrome/Safari/Opera, якщо немає смуги прокрутки, то `documentElement.scrollHeight` може бути навіть меншим, ніж `documentElement.clientHeight`! З точки зору елемента це неможлива ситуація.
4644

47-
Щоб надійно отримати повну висоту документа, ми повинні взяти максимум з цих властивостей:
45+
Щоб надійно отримати повну висоту документа, ми повинні взяти максимальне значення з цих властивостей:
4846

4947
```js run
5048
let scrollHeight = Math.max(
@@ -56,13 +54,13 @@ let scrollHeight = Math.max(
5654
alert('Повна висота документа з прокрученою частиною: ' + scrollHeight);
5755
```
5856

59-
Чому так? Краще не питати. Ці невідповідності походять із давніх часів, це не "логічно".
57+
Чому так? Краще не запитуйте. Ці невідповідності походять із давніх часів, а не з глибокої логіки.
6058

6159
## Отримання поточної позиції прокрутки [#page-scroll]
6260

63-
Елементи DOM містять свій поточний стан прокрутки у властивостях `scrollLeft/scrollTop`.
61+
Елементи DOM зберігають свій поточний стан прокрутки у властивостях `scrollLeft/scrollTop`.
6462

65-
Стан прокрутки документа міститься в `document.documentElement.scrollLeft/scrollTop`, та працює в більшості браузерів, за винятком старіших веб-переглядачів створених на WebKit, таких як Safari (помилка [5991](https://bugs.webkit.org/show_bug.cgi?id=5991)), де ми повинні використовувати `document.body` замість `document.documentElement`.
63+
Стан прокрутки документа міститься в `document.documentElement.scrollLeft/scrollTop`, та працює в більшості браузерів, за винятком старіших браузерів створених на WebKit, таких як Safari (помилка [5991](https://bugs.webkit.org/show_bug.cgi?id=5991)), де ми повинні використовувати `document.body` замість `document.documentElement`.
6664

6765
На щастя, нам не потрібно пам’ятати про ці особливості, оскільки прокрутка доступна у спеціальних властивостях `window.pageXOffset/pageYOffset`:
6866

@@ -77,30 +75,28 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
7775
З історичних причин обидві властивості існують, але вони однакові:
7876
- `window.pageXOffset` є псевдонімом `window.scrollX`.
7977
- `window.pageYOffset` є псевдонімом `window.scrollY`.
80-
```
8178

8279
## Прокрутка: scrollTo, scrollBy, scrollIntoView [#window-scroll]
8380

8481
```warn
85-
Щоб прокручувати сторінку за допомогою JavaScript, її DOM має бути повністю створено.
82+
Для того, щоб прокручувати сторінку за допомогою JavaScript, її DOM має бути повністю створено.
8683
87-
Наприклад, якщо ми спробуємо прокрутити сторінку за допомогою сценарію в `<head>`, це не спрацює.
88-
```
84+
Наприклад, якщо ми спробуємо прокрутити сторінку в коді скрипта розташованого в `<head>`, це не спрацює.
8985
9086
Звичайні елементи можна прокручувати, змінюючи `scrollTop/scrollLeft`.
9187
9288
Ми можемо зробити те ж саме для сторінки, використовуючи `document.documentElement.scrollTop/scrollLeft` (крім Safari, де замість цього слід використовувати `document.body.scrollTop/Left`).
9389
94-
Крім того, є більш просте та універсальне рішення: спеціальні методи [window.scrollBy(x,y)](mdn:api/Window/scrollBy) і [window.scrollTo(pageX,pageY)](mdn:api/Window/scrollTo).
90+
Також існує простіший та універсальний підхід: спеціальні методи [window.scrollBy(x,y)](mdn:api/Window/scrollBy) і [window.scrollTo(pageX,pageY)](mdn:api/Window/scrollTo).
9591
9692
- Метод `scrollBy(x,y)` прокручує сторінку *відносно її поточної позиції*. Наприклад, `scrollBy(0,10)` прокручує сторінку на `10px` вниз.
9793
9894
```online
99-
Кнопка нижче це демонструє:
95+
Кнопка нижче демонструє це:
10096
10197
<button onclick="window.scrollBy(0,10)">window.scrollBy(0,10)</button>
10298
```
103-
- Метод `scrollTo(pageX,pageY)` прокручує сторінку *до абсолютних координат*, так що верхній лівий кут видимої частини має координати `(pageX, pageY)` відносно верхнього лівого кута документа. Це те ж саме, що призначити `scrollLeft/scrollTop`.
99+
- Метод `scrollTo(pageX,pageY)` прокручує сторінку *на абсолютні координати*, так що верхній лівий кут видимої частини мав координати `(pageX, pageY)` відносно верхнього лівого кута документа. Це те ж саме, що призначити `scrollLeft/scrollTop`.
104100
105101
Щоб прокрутити до самого початку, ми можемо використовувати `scrollTo(0,0)`.
106102
@@ -116,7 +112,7 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
116112
117113
Виклик `elem.scrollIntoView(top)` прокручує сторінку таким чином, щоб зробити `elem` видимим. Він має один аргумент:
118114
119-
- Якщо `top=true` (це значення за замовчуванням), то сторінка буде прокручена так, щоб `elem` з’явився у верхній частині вікна. Верхній край елемента буде вирівняний з верхньою частиною вікна.
115+
- Якщо `top=true` (типове значення), то сторінка буде прокручена так, щоб `elem` з’явився у верхній частині вікна. Верхній край елемента буде вирівняний з верхньою частиною вікна.
120116
- Якщо `top=false`, то сторінка прокручується так, щоб `elem` з’явився внизу. Нижній край елемента буде вирівняний з нижньою частиною вікна.
121117
122118
```online
@@ -131,9 +127,9 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
131127

132128
## Заборона прокручування
133129

134-
Іноді нам потрібно зробити документ «непрокручуваним». Наприклад, коли нам потрібно закрити сторінку великим повідомленням, яке вимагає негайної уваги, і ми хочемо, щоб відвідувач взаємодіяв з цим повідомленням, а не з документом.
130+
Іноді нам потрібно зробити документ "не прокручуваним". Наприклад, щоб закрити сторінку великим повідомленням, яке вимагає негайної уваги, і ми хочемо, щоб відвідувач взаємодіяв з цим повідомленням, а не з документом.
135131

136-
Щоб зробити документ недоступним для прокручування, достатньо встановити `document.body.style.overflow = "hidden"`. Сторінка «завмере» у поточній позиції прокручування.
132+
Щоб зробити документ недоступним для прокручування, достатньо встановити `document.body.style.overflow = "hidden"`. Сторінка "завмре" у поточній позиції прокручування.
137133

138134
```online
139135
Спробуй:
@@ -153,7 +149,7 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
153149

154150
## Підсумки
155151

156-
Геометрія:
152+
Розміри:
157153

158154
- Ширина/висота видимої частини документа (ширина/висота області вмісту): `document.documentElement.clientWidth/clientHeight`
159155
- Ширина/висота всього документа з прокрученою частиною:

0 commit comments

Comments
 (0)