Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия | |||
— | object_event [2025/04/20 15:35] (текущий) – [Пример 1: Раскрывающаяся "дополнительная информация"] darkfire | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== JavaScript События Object Event примеры использования ====== | ||
+ | ~~Title: JavaScript События: | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(Разбираемся с JavaScript событиями: | ||
+ | }} | ||
+ | |||
+ | События возникают на странице в результате действий, | ||
+ | |||
+ | Пользователь - первопричина возникновения события. Однако, | ||
+ | |||
+ | Иногда события возникают без участия пользователя. К таким событиям относятся, | ||
+ | |||
+ | В [[JavaScript|JavaScript]] используется весьма уникальная система событий. Она работает абсолютно асинхронно, | ||
+ | Основное отличие программ, | ||
+ | как в асинхронных программах вы просто регистрируете в качестве обработчика события функцию обратного вызова, | ||
+ | |||
+ | Под обработкой события подразумевается программирование реакции браузера (документа) в ответ на возникновение некоторого события. Обработчиком события называется функция или фрагмент кода [[JavaScript|JavaScript]], | ||
+ | |||
+ | ===== Привязка обработчиков событий в JavaScript: современный подход ===== | ||
+ | |||
+ | Чтобы элемент на странице реагировал на действия пользователя (например, | ||
+ | |||
+ | Основные способы назначения обработчиков событий: | ||
+ | * Первый способ назначения обработчика события состоит в использовании HTML атрибутов элемента. Использование атрибутов HTML (устаревший способ, | ||
+ | <file javascript> | ||
+ | < | ||
+ | |||
+ | <button onclick=" | ||
+ | </ | ||
+ | * Второй способ состоит в использовании свойств элемента из сценария JavaScript. Предположим, | ||
+ | <file javascript> | ||
+ | element1.имя_события = обработчик; | ||
+ | </ | ||
+ | Пример назначения обработчика через свойство элемента в JavaScript. Минус: Можно назначить только один обработчик на событие (следующее присваивание перезапишет предыдущий). | ||
+ | <file javascript> | ||
+ | <button id=" | ||
+ | |||
+ | < | ||
+ | const btn = document.getElementById(' | ||
+ | btn.onclick = function() { | ||
+ | alert(' | ||
+ | }; | ||
+ | </ | ||
+ | </ | ||
+ | * Рекомендуемый способ — метод **addEventListener()**. DOM - привязка: | ||
+ | <file javascript> | ||
+ | // Находим первый элемент < | ||
+ | const form = document.querySelector(' | ||
+ | |||
+ | if (form) { | ||
+ | // Привязываем обработчик события ' | ||
+ | form.addEventListener(' | ||
+ | // Отменяем стандартное действие — отправку формы | ||
+ | event.preventDefault(); | ||
+ | |||
+ | // Здесь можно добавить свою логику обработки данных формы | ||
+ | console.log(' | ||
+ | |||
+ | // Например, | ||
+ | }); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Преимущества: | ||
+ | |||
+ | * Можно назначать несколько обработчиков на одно событие. | ||
+ | * Можно легко удалять обработчики с помощью removeEventListener. | ||
+ | * Чистое разделение логики и разметки. | ||
+ | * Работает с любыми объектами, | ||
+ | |||
+ | <file javascript> | ||
+ | <button id=" | ||
+ | |||
+ | < | ||
+ | const btn = document.getElementById(' | ||
+ | |||
+ | function handleClick() { | ||
+ | alert(' | ||
+ | } | ||
+ | |||
+ | btn.addEventListener(' | ||
+ | </ | ||
+ | </ | ||
+ | <panel type=" | ||
+ | Недостаток W3C- привязки: | ||
+ | |||
+ | В 2025 году attachEvent не актуален и не используется в современных веб-разработках. Для событий следует применять только addEventListener и при необходимости полифиллы для очень старых браузеров. | ||
+ | </ | ||
+ | |||
+ | <panel type=" | ||
+ | ===== Всплытие событий и stopPropagation ===== | ||
+ | |||
+ | Когда в элементе [[DOM]] возникает событие, | ||
+ | |||
+ | Почти все события всплывают. Ключевое слово в этой фразе – " | ||
+ | |||
+ | Одной из ключевых возможностей всплывания событий является способность отправлять событие родительскому элементу для обработки. Это полезно, | ||
+ | |||
+ | ==== Пример: | ||
+ | Одной из ключевых возможностей всплытия событий является способность отправлять событие к родительскому элементу для обработки. Это полезно, | ||
+ | <file javascript> | ||
+ | <div id=" | ||
+ | Родительский элемент | ||
+ | <button id=" | ||
+ | </ | ||
+ | </ | ||
+ | <file javascript> | ||
+ | const parent = document.getElementById(" | ||
+ | const child = document.getElementById(" | ||
+ | |||
+ | parent.addEventListener(" | ||
+ | alert(" | ||
+ | }); | ||
+ | |||
+ | child.addEventListener(" | ||
+ | alert(" | ||
+ | event.stopPropagation(); | ||
+ | }); | ||
+ | </ | ||
+ | В этом примере обработчики событий назначены как для родительского, | ||
+ | |||
+ | Всплытие событий — это мощный механизм в JavaScript и DOM, который позволяет обрабатывать события на родительских элементах, | ||
+ | ===== Object Event ===== | ||
+ | |||
+ | Объект Event ([[https:// | ||
+ | * объект event создается браузером автоматически | ||
+ | * объект event доступен только в обработчиках событий | ||
+ | * объект event не имеет методов. В вашем распоряжении только свойства, | ||
+ | |||
+ | |||
+ | |||
+ | <file bash> | ||
+ | Свойство Пояснение | ||
+ | type Возвращает тип события | ||
+ | returnValue позволяет установить возвращаемое обработчиком события значение. | ||
+ | true - (по умолчанию) стандартный обработчик будет вызван | ||
+ | false - стандартный обработчик не вызывается | ||
+ | |||
+ | cancelBubble устанавливает признак " | ||
+ | true - всплывание события не происходит | ||
+ | false - (по умолчанию) событие всплывает | ||
+ | |||
+ | srcElement элемент - источник события | ||
+ | toElement указывает элемент, | ||
+ | fromElement указывает элемент, | ||
+ | button определяет, | ||
+ | 0 - нет нажатых кнопок | ||
+ | 1 - левая кнопка | ||
+ | 2 - правая кнопка | ||
+ | 3 - левая и правая кнопки | ||
+ | 4 - средняя кнопка | ||
+ | 5 - левая и средняя кнопки | ||
+ | 6 - правая и средняя кнопки | ||
+ | 7 - все три кнопки | ||
+ | |||
+ | wheelDelta определяет смещение при прокрутке колеса мыши. Отрицательное значение - поворот колеса "на себя", | ||
+ | offsetX, offsetY Координаты курсора мыши в момент возникновения события относительно верхнего левого угла элемента, | ||
+ | x, y Координаты курсора мыши в момент возникновения события относительно верхнего левого угла относительно позиционируемого родительского элемента. | ||
+ | clientX, clientY Координаты курсора мыши в момент возникновения события относительно верхнего левого угла клиентской области страницы. | ||
+ | screenX, screenY Координаты курсора мыши в момент возникновения события относительно верхнего левого угла экрана. | ||
+ | keyCode Код нажатой на клавиатуре клавиши в Unicode | ||
+ | altKey Признак состояния кнопки Alt в момент возникновения события: | ||
+ | altLeft Признак состояния левой кнопки Alt в момент возникновения события: | ||
+ | ctrlKey Признак состояния кнопки Ctrl в момент возникновения события: | ||
+ | ctrlLeft Признак состояния левой кнопки Ctrl в момент возникновения события: | ||
+ | shiftKey Признак состояния кнопки Shift в момент возникновения события: | ||
+ | shiftLeft Признак состояния левой кнопки Shift в момент возникновения события: | ||
+ | repeat признак удерживания клавиши | ||
+ | </ | ||
+ | |||
+ | ===== Запрет вызова стандартного обработчика ===== | ||
+ | Существует ряд элементов в HTML, для которых определены некоторые обработчики событий по умолчанию или стандартные обработчики. Так, для элемента <a> (гиперссылка) определён обработчик onclick, выполняющий переход на ресурс, | ||
+ | |||
+ | В современных браузерах для этого используется метод event.preventDefault(), | ||
+ | |||
+ | Пример отмены перехода по ссылке: | ||
+ | <file javascript> | ||
+ | <a href=" | ||
+ | |||
+ | < | ||
+ | const link = document.getElementById(' | ||
+ | link.addEventListener(' | ||
+ | event.preventDefault(); | ||
+ | alert(' | ||
+ | }); | ||
+ | </ | ||
+ | </ | ||
+ | Ранее в старых браузерах, | ||
+ | |||
+ | Использование event.preventDefault() обеспечивает кроссбраузерную и надёжную отмену стандартных действий, | ||
+ | ===== Пример 1: Раскрывающаяся " | ||
+ | На web страницах часто используют этот прием. Например, | ||
+ | <file javascript> | ||
+ | < | ||
+ | <html lang=" | ||
+ | < | ||
+ | <meta charset=" | ||
+ | < | ||
+ | < | ||
+ | #primer1 { | ||
+ | display: none; | ||
+ | padding: 5px; | ||
+ | background-color: | ||
+ | white-space: | ||
+ | } | ||
+ | # | ||
+ | display: block; | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | <button id=" | ||
+ | <pre id=" | ||
+ | #include < | ||
+ | |||
+ | void main () { | ||
+ | cout<<" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | const btn = document.getElementById(' | ||
+ | const pre = document.getElementById(' | ||
+ | |||
+ | btn.addEventListener(' | ||
+ | pre.classList.toggle(' | ||
+ | btn.textContent = pre.classList.contains(' | ||
+ | }); | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | ===== Пример 2: Работаем с мышью: перетаскивание элементов. Drag and Drop. ===== | ||
+ | Предлагаемый для рассмотрения пример демонстрирует минимально функциональную версию реализации технологии перетаскивания объектов мышью. Это учебный пример, | ||
+ | |||
+ | Приступим. Для начала зададимся вопросом - какие события мы будем обрабатывать для перетаскиваемого элемента? | ||
+ | |||
+ | Итак, с событиями вопрос выяснен. Теперь разберемся с самими элементами. Дело в том, что задавать координаты элементов (left и top) можно только для абсолютно позиционируемых (в нашем случае) элементов. Значит - в стилевое оформление перетаскиваемых элементов должна входить строка " | ||
+ | |||
+ | Ниже приводится полный код примера. Обратите внимание на следующую особенность: | ||
+ | После выполнения примера, | ||
+ | |||
+ | Исправим этот недостаток. Для этого будем при " | ||
+ | <file html> | ||
+ | < | ||
+ | < | ||
+ | <style type=" | ||
+ | # | ||
+ | | ||
+ | | ||
+ | | ||
+ | left: 10; | ||
+ | top: 10; | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | var elementToDrag = null; | ||
+ | var offX, offY; // глобальные переменные для хранения смещения | ||
+ | function captureElement (elem) { // " | ||
+ | if (!elementToDrag) { | ||
+ | elementToDrag = elem; | ||
+ | offX = event.offsetX; | ||
+ | offY = event.offsetY; | ||
+ | } | ||
+ | } | ||
+ | function releaseElement () { // " | ||
+ | elementToDrag = null; | ||
+ | } | ||
+ | function dragElement () { // " | ||
+ | if (elementToDrag){ | ||
+ | elementToDrag.style.pixelLeft = event.clientX - offX; // вносим поправку | ||
+ | elementToDrag.style.pixelTop = event.clientY - offY; // в координаты элемента | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | <body onmousemove=" | ||
+ | <span id=" | ||
+ | onmousedown=" | ||
+ | onmouseup=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга