Skip to content

Commit 5b084dd

Browse files
committed
fix(2-1.10): Review Window sizes and scrolling article
1 parent e487e5d commit 5b084dd

File tree

1 file changed

+29
-28
lines changed
  • 2-ui/1-document/10-size-and-scroll-window

1 file changed

+29
-28
lines changed

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

Lines changed: 29 additions & 28 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

@@ -16,35 +16,35 @@
1616
<button onclick="alert(document.documentElement.clientHeight)">alert(document.documentElement.clientHeight)</button>
1717
```
1818

19-
````warn header="Не `window.innerWidth/innerHeight`"
20-
Браузери також підтримують властивості `window.innerWidth/innerHeight`. Здається, це те, що нам потрібно, то чому б їх не використати?
19+
`` ``warn header="Не `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`.
33+
`` ``
3434

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

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

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

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

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

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

4949
```js run
5050
let scrollHeight = Math.max(
@@ -56,13 +56,13 @@ let scrollHeight = Math.max(
5656
alert('Повна висота документа з прокрученою частиною: ' + scrollHeight);
5757
```
5858

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

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

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

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

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

@@ -73,34 +73,35 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
7373

7474
Ці властивості доступні лише для читання.
7575

76-
```smart header="Також доступні як властивості `window` `scrollX` та `scrollY`"
76+
` ``
77+
smart header="Також доступні як властивості `window` `scrollX` та `scrollY`"
7778
З історичних причин обидві властивості існують, але вони однакові:
7879
- `window.pageXOffset` є псевдонімом `window.scrollX`.
7980
- `window.pageYOffset` є псевдонімом `window.scrollY`.
80-
```
81+
` ``
8182

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

84-
```warn
85-
Щоб прокручувати сторінку за допомогою JavaScript, її DOM має бути повністю створено.
85+
` ``warn
86+
Для того, щоб прокручувати сторінку за допомогою JavaScript, її DOM має бути повністю створено.
8687

87-
Наприклад, якщо ми спробуємо прокрутити сторінку за допомогою сценарію в `<head>`, це не спрацює.
88-
```
88+
Наприклад, якщо ми спробуємо прокрутити сторінку за допомогою скрипту в `<head>`, це не спрацює.
89+
` ``
8990

9091
Звичайні елементи можна прокручувати, змінюючи `scrollTop/scrollLeft`.
9192

9293
Ми можемо зробити те ж саме для сторінки, використовуючи `document.documentElement.scrollTop/scrollLeft` (крім Safari, де замість цього слід використовувати `document.body.scrollTop/Left`).
9394

94-
Крім того, є більш просте та універсальне рішення: спеціальні методи [window.scrollBy(x,y)](mdn:api/Window/scrollBy) і [window.scrollTo(pageX,pageY)](mdn:api/Window/scrollTo).
95+
Також існує простіший та універсальний підхід: спеціальні методи [window.scrollBy(x,y)](mdn:api/Window/scrollBy) і [window.scrollTo(pageX,pageY)](mdn:api/Window/scrollTo).
9596

9697
- Метод `scrollBy(x,y)` прокручує сторінку *відносно її поточної позиції*. Наприклад, `scrollBy(0,10)` прокручує сторінку на `10px` вниз.
9798

9899
```online
99-
Кнопка нижче це демонструє:
100+
Кнопка нижче демонструє це:
100101
101102
<button onclick="window.scrollBy(0,10)">window.scrollBy(0,10)</button>
102103
```
103-
- Метод `scrollTo(pageX,pageY)` прокручує сторінку *до абсолютних координат*, так що верхній лівий кут видимої частини має координати `(pageX, pageY)` відносно верхнього лівого кута документа. Це те ж саме, що призначити `scrollLeft/scrollTop`.
104+
- Метод `scrollTo(pageX,pageY)` прокручує сторінку *на абсолютні координати*, так що верхній лівий кут видимої частини мав координати `(pageX, pageY)` відносно верхнього лівого кута документа. Це те ж саме, що призначити `scrollLeft/scrollTop`.
104105
105106
Щоб прокрутити до самого початку, ми можемо використовувати `scrollTo(0,0)`.
106107
@@ -116,7 +117,7 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
116117
117118
Виклик `elem.scrollIntoView(top)` прокручує сторінку таким чином, щоб зробити `elem` видимим. Він має один аргумент:
118119
119-
- Якщо `top=true` (це значення за замовчуванням), то сторінка буде прокручена так, щоб `elem` з’явився у верхній частині вікна. Верхній край елемента буде вирівняний з верхньою частиною вікна.
120+
- Якщо `top=true` (за замовчуванням), то сторінка буде прокручена так, щоб `elem` з’явився у верхній частині вікна. Верхній край елемента буде вирівняний з верхньою частиною вікна.
120121
- Якщо `top=false`, то сторінка прокручується так, щоб `elem` з’явився внизу. Нижній край елемента буде вирівняний з нижньою частиною вікна.
121122
122123
```online
@@ -131,9 +132,9 @@ alert('Поточна прокрутка зліва: ' + window.pageXOffset);
131132

132133
## Заборона прокручування
133134

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

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

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

154155
## Підсумки
155156

156-
Геометрія:
157+
Розміри:
157158

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

0 commit comments

Comments
 (0)