Page 127 - 6108
P. 127
поки виконувався код для onclick – відвідувач натиснув кнопку на клавіатурі
(подія keydown).
В кожному вікні виконується тільки один головний потік, який
займається виконанням JavaScript, виводом на екран і роботою з DOM. Він
виконує команди послідовно, може робити тільки одну справу одночасно і
блокується при виведенні модальних вікон, таких як alert, confirm, prompt.
Є й інші, службові потоки, наприклад, для мережевих комунікацій. Тому
скачування файлів може тривати поки головний потік чекає реакції на alert.
Але керувати службовими потоками ми не можемо.
Існує специфікація Web Workers, яка дозволяє запускати додаткові
JavaScript-процеси (workers). Вони можуть обмінюватися повідомленнями з
головним процесом, але у них свої змінні, і працюють вони також самі по собі.
Такі додаткові процеси не мають доступу до DOM, тому вони корисні,
переважно, при обчисленнях, щоб завантажити декілька ядер/процесорів
одночасно.
Коли відбувається подія, воно потрапляє в чергу. Усередині браузера
безперервно працює «головний внутрішній цикл», який стежить за станом
черги і обробляє події, запускає відповідні обробники і т.п.
Іноді події додаються в чергу відразу пачкою. Наприклад, при кліці на
елементі генерується кілька подій:
1. Спочатку mousedown – натиснута кнопка миші.
2. Потім mouseup – кнопка миші відпущена і, так як це було над одним
елементом, то додатково генерується click (дві події відразу).
Зазвичай події, що виникають «стають в чергу». Але коли подія
ініціюється не відвідувачем, а кодом, то вона, як правило, обробляється
синхронно, тобто зразу, в обхід черги.
3.5.3 Об’єкт Event
При обробці події браузер автоматично передає в функцію обробника в
якості параметра об'єкт Event, який інкапсулює всю інформацію про подію. І
за допомогою його властивостей можна отримати цю інформацію:
bubbles: повертає true, якщо подія є висхідною. Наприклад, якщо подія
виникла на вкладеному елементі, то вона може бути оброблена на
батьківському елементі.
cancelable: повертає true, якщо можна скасувати стандартну обробку
події
currentTarget: визначає елемент, до якого прикріплений обробник
події
defaultPrevented: повертає true, якщо був викликаний у об'єкта
Event метод preventDefault()
eventPhase: визначає стадію обробки події
target: вказує на елемент, на якому було викликано подію (можемо
маніпулювати ним як і будь-якими іншими вузлами і елементами DOM)
timeStamp: зберігає час виникнення події
type: вказує на ім'я події
isTrusted: