Skip to content

Commit 8c95048

Browse files
Apply suggestions from code review
Co-authored-by: Stanislav <s.dolgachov@gmail.com>
1 parent c843f3d commit 8c95048

12 files changed

Lines changed: 32 additions & 32 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Як можна бачити з `HTML/CSS`, слайдер - це `<div>`, з кольровим фоном, всередині якого знаходиться інший `<div>`, оформлений як бігунок, з `position: relative`.
1+
Як можна бачити з `HTML/CSS`, слайдер -- це `<div>`, з кольровим фоном, всередині якого знаходиться інший `<div>`, оформлений як бігунок, з `position: relative`.
22

3-
Використовуємо для його позиціювання `position: relative`, тобто координати встановлюються не абсолютні, а відносно зовнішнього родича, так як це зручніше.
3+
Використаємо для його позиціювання `position: relative`, тобто координати встановлюються не абсолютні (`position: absolute`), а відносно батьківського елементу, бо це зручніше.
44

55
І далі реалізуємо Drag'n'Drop тільки по горизонталі, з обмеженням по ширині.

‎2-ui/3-event-details/4-mouse-drag-and-drop/1-slider/solution.view/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
let thumb = slider.querySelector('.thumb');
1717

1818
thumb.onmousedown = function(event) {
19-
event.preventDefault(); // запобігти запуск виділення (дія браузера)
19+
event.preventDefault(); // запобігає запуску виділення (типова дія браузера)
2020

2121
let shiftX = event.clientX - thumb.getBoundingClientRect().left;
2222
// shiftY не потрібен, слайдер рухається тільки по горизонталі
@@ -27,7 +27,7 @@
2727
function onMouseMove(event) {
2828
let newLeft = event.clientX - shiftX - slider.getBoundingClientRect().left;
2929

30-
// курсор вийшов зі слайдера => залишити бігунок в його межах.
30+
// курсор вийшов за межі слайдера => зафіксуємо бігунок в межах слайдера.
3131
if (newLeft < 0) {
3232
newLeft = 0;
3333
}

‎2-ui/3-event-details/4-mouse-drag-and-drop/1-slider/task.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ importance: 5
22

33
---
44

5-
# Slider
5+
# Слайдер
66

77
Створіть слайдер:
88

99
[iframe src="solution" height=60 border=1]
1010

11-
Натисніть мишею на синій бігунок і рухайте його.
11+
Наведіть курсор миші на бігунок слайдеру, затисніть кнопку миші і рухайте бігунок переміщаючи курсор.
1212

1313
Важливі деталі:
1414

15-
- При натиснутому бігунці курсор миші може виходити за межі смуги слайдера, але слайдер нехай все одно працює (це зручно для користувача).
16-
- Слайдер повинен нормально працювати при різкому русі миші вліво або вправо за межі смуги. При цьому бігунок повинен зупинятися чітко в потрібному кінці смуги.
15+
- При натиснутій кнопці миші, курсор може виходити за межі слайдера, але слайдер все одно має працювати (це зручно для користувача).
16+
- Слайдер повинен нормально працювати при різкому русі миші ливоруч або праворуч за межі слайдера. При цьому бігунок повинен зупинятися чітко біля його краю.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Щоб перетягнути елемент, ми можемо використовувати `position: fixed`, це робить управління координатами простіше. В кінці слід переключитися назад на `position: absolute`, щоб покласти елемент в документ.
1+
Щоб перетягнути елемент, ми можемо використовувати `position: fixed`, це робить управління координатами простішим. Після завершення слід переключитися назад на `position: absolute`, щоб елемент залишився частиною сторінки.
22

33
Коли координати знаходяться у верхній/нижній частині вікна, ми використовуємо `window.scrollTo` для прокрутки.
44

5-
Деталі рішення розписані в коментарях в вихідному коді.
5+
Деталі рішення розписані в коментарях у коді.

‎2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/index.html‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88

99
<body>
1010

11-
<h2>Розставте супергероїв по полю.</h2>
11+
<h2>Розставте супергероїв полем.</h2>
1212

13-
<p>Супергерої і м’яч - це елементи з класом "draggable". Зробіть так, щоб їх можна було переносити.</p>
13+
<p>Супергерої і м’яч -- це елементи з класом "draggable". Зробіть так, щоб їх можна було переносити.</p>
1414

15-
<p>Важливо: обмежити перетягування межами вікна. Якщо супергероя підносять до верхньої або нижньої межі сторінки, вона повинна автоматично прокручуватися.</p>
15+
<p>Важливо: обмежити перетягування межами вікна. Якщо супергероя підносять до верхньої або нижньої межі вікна, сторінка повинна автоматично прокручуватися.</p>
1616

17-
<p>Якщо сторінка поміщається на вашому екрані цілком і не має вертикальної прокрутки - зробіть вікно браузера менше, щоб протестувати цю можливість.</p>
17+
<p>Якщо сторінка міститься на екрані повністю і не має вертикальної прокрутки -- зробіть вікно браузера менше, щоб протестувати цю можливість.</p>
1818

19-
<p>У цьому завданні достатньо впоратися з вертикальною прокруткою. Зазвичай немає горизонтальної прокрутки, і вона обробляється аналогічним чином, якщо це необхідно.</p>
19+
<p>У цьому завданні достатньо впоратися з вертикальною прокруткою. Зазвичай горизонтальна прокрутка відсутня, вона обробляється аналогічно, якщо це необхідно.</p>
2020

2121
<p>Так, і ще: супергерої ні за яких умов не повинні потрапити за край екрану.</p>
2222

‎2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/soccer.css‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ html, body {
1010
float: left;
1111
}
1212

13-
/* герої і м'яч (dragables) */
13+
/* герої і м’яч (dragables) */
1414

1515
.hero {
1616
background: url(https://js.cx/drag-heroes/heroes.png);

‎2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/soccer.js‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ document.addEventListener('mousedown', function(event) {
2525
}
2626

2727
// на початку переміщення елемента:
28-
// запам'ятовуємо місце кліку по елементу (shiftX, shiftY) ,
28+
// зберегаємо місце кліку по елементу
2929
// перемикаємо позиціонування елемента (position: fixed) і рухаємо елемент
3030
function startDrag(element, clientX, clientY) {
3131
if(isDragging) {
@@ -66,40 +66,40 @@ document.addEventListener('mousedown', function(event) {
6666
let newX = clientX - shiftX;
6767
let newY = clientY - shiftY;
6868

69-
// перевіряємо, чи не переходять нові координати за нижній край вікна:
69+
// перевіряємо, чи не виходять нові координати за нижній край вікна:
7070
// спочатку обчислюємо гіпотетичний новий нижній край вікна
7171
let newBottom = newY + dragElement.offsetHeight;
7272

73-
// новий край вікна виходить за межі документа? прокручуємо сторінку
73+
// виходять за межі вікна? прокручуємо сторінку
7474
if (newBottom > document.documentElement.clientHeight) {
7575
// координата нижнього краю документа щодо вікна
7676
let docBottom = document.documentElement.getBoundingClientRect().bottom;
7777

78-
// скролл документа на 10px вниз має проблему -
79-
// він може прокручувати документ за його межі,
78+
// прокрутка документа на 10px вниз має проблему --
79+
// він може прокрутити документ за його межі,
8080
// тому використовуємо Math.min (відстань до кінця, 10)
8181
let scrollY = Math.min(docBottom - newBottom, 10);
8282

83-
// обчислення можуть бути не зовсім точні - трапляються помилки при округленні,
84-
// які призводять до негативного значенням прокрутки. відфільтруємо їх:
83+
// обчислення можуть бути не зовсім точні -- трапляються помилки при округленні,
84+
// які призводять до негативного значенням прокрутки. Відфільтруємо їх:
8585
if (scrollY < 0) scrollY = 0;
8686

8787
window.scrollBy(0, scrollY);
8888

8989
// швидке переміщення миші може помістити курсор за межі документа вниз
9090
// якщо це сталося -
91-
// обмежуємо нове значення Y максимально можливим виходячи з розміру документа:
91+
// обмежуємо нове значення Y максимально можливим, виходячи з розміру документа:
9292
newY = Math.min(newY, document.documentElement.clientHeight - dragElement.offsetHeight);
9393
}
9494

95-
// перевіряємо, чи не переходять нові координати за верхній край вікна (по схожому алгоритму)
95+
// перевіряємо, чи не переходять нові координати за верхній край вікна (за схожим алгоритмом)
9696
if (newY < 0) {
9797
// scroll up
9898
let scrollY = Math.min(-newY, 10);
9999
if (scrollY < 0) scrollY = 0; // перевіряємо помилки точності
100100

101101
window.scrollBy(0, -scrollY);
102-
// швидке переміщення миші може помістити курсор за межі документа вгору
102+
// швидке переміщення миші може помістити курсор за межі документа зверху
103103
newY = Math.max(newY, 0); // newY не може бути менше нуля
104104
}
105105

‎2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/source.view/soccer.css‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ html, body {
1010
float: left;
1111
}
1212

13-
/* герої і м'яч (dragables) */
13+
/* герої і м’яч (dragables) */
1414

1515
.hero {
1616
background: url(https://js.cx/drag-heroes/heroes.png);

‎2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/task.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ importance: 5
44

55
# Розставити супергероїв по полю
66

7-
У цьому завданні ви можете перевірити своє розуміння відразу декількох аспектів Drag'n'Drop і DOM .
7+
У цьому завданні ви можете перевірити своє розуміння відразу декількох аспектів Drag'n'Drop і DOM.
88

99
Зробіть так, щоб елементи з класом `draggable` -- можна було переносити мишкою. Як м’яч в цьому розділі.
1010

1111
Вимоги до реалізації:
1212

1313
- Використовуйте делегування подій для відстеження початку перетягування: тільки один обробник подій `mousedown` на `document`.
14-
- Якщо елементи підносять до верхньої/нижньої межі вікна - вікно повинне прокручуватися вгору/вниз, щоб дозволити подальше перетягування.
14+
- Якщо елементи підносять до верхньої/нижньої межі вікна -- вікно повинне прокручуватися вгору/вниз, щоб дозволити подальше перетягування.
1515
- Горизонтальна прокрутка відсутня (трохи спрощує завдання, її просто додати).
1616
- Елемент при перенесенні, навіть при різких рухах мишкою, не повинен навіть частково потрапити поза вікно.
1717

‎2-ui/3-event-details/4-mouse-drag-and-drop/ball.view/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<body style="height: 200px">
99

10-
<p>Перетягни м’яч.</p>
10+
<p>Перетягніть м’яч.</p>
1111

1212
<img src="https://js.cx/clipart/ball.svg" style="cursor:pointer" width="40" height="40" id="ball">
1313

0 commit comments

Comments
 (0)