События мыши js: Основы событий мыши

Обработка событий JavaScript фреймворка Vue.js

Подписка на события

Для подписки на события DOM и выполнения JavaScript-кода по их наступлении, используйте директиву v-on.


<div>
  <button v-on:click="counter += 1">+1</button>
  <p>Кнопка выше была нажата {{counter}} раз</p>
</div>

var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})

Обработчики событий

Логика обработки события может быть сложной, поэтому v-on может принять название метода, который нужно вызвать.


<div>
  <!-- `greet` — это название метода, определённого ниже -->
  <button v-on:click="greet">Поприветствовать</button>
</div>

var example2 = new Vue({
  el: '#example-2',
  data: {
    name: 'Vue.js'
  },
  // определяйте методы в объекте `methods`
  methods: {
    greet: function (event) {
      // `this` внутри методов указывает на экземпляр Vue
      alert('Привет, ' + this.
name + '!') // `event` — нативное событие DOM if (event) { alert(event.target.tagName) } } } }) // вызывать методы можно и императивно example2.greet() // => 'Привет, Vue.js!'

Методы и inline-обработчики

Связаться с методом можно не по имени, а вызвав в JavaScript-выражении.


<div>
  <button v-on:click="say('hi')">Скажи hi</button>
  <button v-on:click="say('what')">Скажи what</button>
</div>

new Vue({
  el: '#example-3',
  methods: {
    say: function (message) {
      alert(message)
    }
  }
})

Передать оригинальное событие DOM в метод inline-обработчика можно через специальную переменную $event:


<button v-on:click="warn('Форма пока что не может быть отправлена.', $event)">
  Отправить
</button>

// . ..
methods: {
  warn: function (message, event) {
    // теперь у нас есть доступ к нативному событию
    if (event) event.preventDefault()
    alert(message)
  }
}

Модификаторы событий

При необходимости вызвать event.preventDefault() или event.stopPropagation() в обработчике события нужно использовать модификаторы событий для v-on.

Модификаторы директив указываются как постфиксы и отделяются точкой.

Конечно, это можно сделать внутри метода, но лучше сохранить чистоту логики и абстрагироваться от деталей реализации событий DOM.

  • .stop
  • .prevent
  • .capture
  • .self
  • .once

<!-- событие click не будет всплывать дальше --> <a v-on:click.stop="doThis"></a> <!-- событие submit больше не будет перезагружать страницу --> <form v-on:submit.prevent="onSubmit"></form> <!-- модификаторы можно объединять в цепочки --> <a v-on:click. stop.prevent="doThat"></a> <!-- и использовать без указания пользовательского обработчика --> <form v-on:submit.prevent></form> <!-- при добавлении слушателя события можно использовать capture mode --> <!-- т.е. событие, нацеленное на внутренний элемент, обрабатывается здесь после обработки этим элементом --> <div v-on:click.capture="doThis">...</div> <!-- вызывать обработчик только в случае наступления события непосредственно --> <!-- на данном элементе (то есть не на дочернем компоненте) --> <div v-on:click.self="doThat">...</div>

Порядок модификаторов имеет значение, так как код генерируется в указанном порядке. Использование @click.prevent.self будет предотвращать все клики, а @click.self.prevent будет предотвращать клики только на самом элементе.


<!-- Событие click сработает только 1 раз -->
<a v-on:click. once="doThis"></a>

Модификатор .once в отличие от остальных, которые поддерживают нативные DOM-события, можно использовать и в пользовательских событиях компонентов.

Модификаторы клавиш

Vue позволяет добавить модификаторы клавиш при использовании v-on для отслеживания событий от клавиатуры:


<!-- вызвать `vm.submit()` только если `keyCode` равен 13 -->
<input v-on:keyup.13="submit">

Vue предоставляет псевдонимы для часто используемых кодов клавиш:


<!-- аналогично примеру выше -->
<input v-on:keyup.enter="submit">

<!-- работает также и в сокращённой записи -->
<input @keyup.enter="submit">
  • .enter
  • .tab
  • .delete (ловит как “Delete”, так и “Backspace”)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

Можно также определить пользовательские псевдонимы клавиш через глобальный объект config. keyCodes:


// позволит использовать `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

Автоматические модификаторы клавиш

Использовать любые допустимые имена клавиш напрямую, открытые через KeyboardEvent.key в качестве модификаторов, можно именуя их в kebab-case:


<input @keyup.page-down="onPageDown">

В примере обработчик будет вызван если $event.key === ‘PageDown’.

Системные модификаторы клавиш

Можно использовать следующие модификаторы, чтобы отслеживать события мыши или клавиатуры с зажатой клавишей-модификатором:

  • .ctrl
  • .alt
  • .shift
  • .meta

<!-- Alt + C -->
<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Сделать что-нибудь</div>

Модификатор .exact

Модификатор .exact дает контролировать точную комбинацию системных модификаторов, нужных для запуска события.


<!-- это сработает даже если Alt или Shift также нажаты -->
<button @click.ctrl="onClick">A</button>

<!-- это сработает только когда нажат Ctrl и не нажаты никакие другие клавиши -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- это сработает только когда не нажаты никакие системные модификаторы -->
<button @click.exact="onClick">A</button>

Модификаторы клавиш мыши

Следующие модификаторы ограничивают обработчик события только вызовами определённой кнопкой мыши.

  • .left
  • .right
  • .middle

Почему подписчики указываются в HTML?

Все обработчики во Vue строго связываются с ответственным за текущее представление экземпляром vm. Поэтому трудностей в поддержке не возникает.
Преимущества использования v-on:

  • Легче получить представление об обработчиках
  • Код vm остаётся независимым от DOM и содержит только необходимую логику, так как не нужно вручную привязывать слушателей событий в JavaScript.
  • Когда vm уничтожается, все слушатели событий автоматически удаляются.

HTML DOM События

❮ Предыдущая Следующая Ссылка ❯


HTML DOM События

HTML DOM события позволяют JavaScript регистрировать различные обработчик событий элементов в HTML-документе.

События , как правило , используются в комбинации с функциями, и функция не будет выполнена , прежде чем происходит событие (such as when a user clicks a button) .

Tip: Модель событий был стандартизирован W3C в DOM Level 2.


HTML DOM События

DOM: Указывает , в котором был введен DOM Level свойство.

События мыши

Мероприятие Описание DOM
по щелчку Событие происходит, когда пользователь нажимает на элемент 2
oncontextmenu Событие происходит, когда правая-пользователь нажимает на элемент, чтобы открыть контекстное меню 3
ondblclick Событие происходит, когда пользователь дважды щелкает на элементе 2
OnMouseDown Событие происходит, когда пользователь нажимает кнопку мыши над элементом 2
OnMouseEnter Событие происходит, когда указатель перемещается на элемент 2
OnMouseLeave Событие происходит, когда указатель перемещается из элемента 2
OnMouseMove Событие происходит, когда указатель перемещается в то время как он находится над элементом 2
при наведении курсора на Событие происходит, когда указатель перемещается на элемент, или на одном из своих детей 2
onmouseout Событие происходит, когда пользователь перемещает указатель мыши из одного элемента, или из одного из своих детей 2
OnMouseUp Событие происходит, когда пользователь отпускает кнопку мыши над элементом 2

клавишные события

Мероприятие Описание DOM
OnKeyDown Событие происходит, когда пользователь нажимает клавишу 2
OnKeyPress Событие происходит, когда пользователь нажимает клавишу 2
OnKeyUp Событие происходит, когда пользователь отпускает клавишу 2

Каркасный / Событие объекта

Мероприятие Описание DOM
OnAbort Событие происходит, когда загрузка ресурса была прервана 2
onbeforeunload Событие происходит до того, как документ собирается быть выгружен 2
OnError Событие происходит, когда возникает ошибка при загрузке внешнего файла 2
onhashchange Событие происходит, когда произошло изменения в анкерной части URL 3
в процессе Событие возникает, когда объект загружен 2
onpageshow Событие происходит, когда пользователь переходит на веб-страницу 3
onpagehide Событие происходит, когда пользователь переходит от веб-страницы 3
OnResize Событие происходит, когда вид документа изменен 2
OnScroll Событие происходит, когда полоса прокрутки элемента давал в настоящее время прокручивается 2
OnUnload Событие происходит раз страница выгрузил (для <тело>) 2

Форма События

Мероприятие Описание DOM
ONBLUR Событие происходит, когда элемент теряет фокус 2
по изменению Событие происходит , когда содержание элемента формы, выбор, или проверяемое состояние изменилось (for <input>, <keygen>, <select>, and <textarea>) 2
OnFocus Событие происходит, когда элемент получает фокус 2
onfocusin Событие происходит, когда элемент собирается получить фокус 2
onfocusout Событие происходит, когда элемент собирается терять фокус 2
oninput Событие происходит, когда элемент получает ввод пользователя 3
oninvalid Событие происходит, когда элемент является недействительным 3
OnReset Событие возникает, когда форма сбрасывается 2
onsearch Событие происходит, когда пользователь пишет что-то в поле поиска (для <вход = «поиск»>) 3
onselect Событие происходит после того, как пользователь выбирает текст (for <input> and <textarea>) 2
onsubmit Событие происходит, когда форма была отправлена 2

Перетащите события

Мероприятие Описание DOM
ondrag Событие происходит, когда элемент перетаскивается 3
ondragend Событие происходит, когда пользователь закончит перетаскивание элемента 3
OnDragEnter Событие происходит, когда элемент входит тащили целью снижения 3
OnDragLeave Событие происходит, когда тащил элемент покидает цель снижения 3
OnDragOver Событие происходит, когда тащил элемент над целевым объектом перетаскивания 3
ondragstart Событие происходит, когда пользователь начинает перетаскивать элемент 3
OnDrop Событие происходит, когда тащил элемент падает на цели перетаскивания 3

Буфер обмена событий

Мероприятие Описание DOM
oncopy Событие происходит, когда пользователь копирует содержимое элемента
oncut Событие происходит, когда пользователь обрезает содержимое элемента
onpaste Событие происходит, когда пользователь вставляет некоторое содержание в элементе

Печать События

Мероприятие Описание DOM
OnAfterPrint Событие происходит, когда страница начала печати, или если окно печати диалог был закрыт 3
OnBeforePrint Событие происходит, когда страница собирается быть распечатаны 3

СМИ События

Мероприятие Описание DOM
OnAbort Событие происходит, когда нагрузка на СМИ прерывается 3
oncanplay Событие происходит, когда браузер может начать воспроизведение носителя (когда он буферном достаточно, чтобы начать) 3
oncanplaythrough Событие происходит, когда браузер может играть через средства массовой информации без остановки для буферизации 3
ondurationchange Событие происходит, когда длительность СМИ изменяется 3
onemptied Событие происходит , когда что — то плохое происходит , и медиа — файл вдруг недоступен (like unexpectedly disconnects) , (like unexpectedly disconnects) 3
onended Событие происходит , когда среда имеет дойдет до конца (useful for messages like «thanks for listening») 3
OnError Событие происходит, когда произошла ошибка во время загрузки медиа-файл 3
onloadeddata Событие происходит, когда данные носитель загружен 3
onloadedmetadata Событие происходит , когда данные мета (like dimensions and duration) , (like dimensions and duration) не загружены 3
onloadstart Событие происходит, когда браузер начинает искать для указанного средства массовой информации 3
OnPause Событие происходит, когда среда находится в режиме паузы либо пользователем, либо программно 3
onplay Событие происходит, когда были начаты СМИ или больше не приостановлено 3
onplaying Событие происходит, когда среда играет после того, как был остановлен или остановлен для буферизации 3
в процессе Событие происходит , когда браузер находится в процессе получения мультимедийных данных (downloading the media) 3
onratechange Событие происходит, когда скорость воспроизведения СМИ изменяется 3
onseeked Событие происходит, когда пользователь заканчивает перемещение / пропуск в новую позицию в средствах массовой информации 3
onseeking Событие происходит, когда пользователь начинает движение / пропуск в новое положение в средствах массовой информации 3
onstalled Событие происходит, когда браузер пытается получить мультимедийные данные, но данные не доступны 3
onsuspend Событие происходит, когда браузер намеренно не получать мультимедийные данные 3
ontimeupdate Событие происходит, когда позиция воспроизведения изменилась (например, когда пользователь быстро вперед к другой точке в средствах массовой информации) 3
onvolumechange Событие происходит, когда объем средств массовой информации изменился (включает в себя установку громкости на «немую») 3
onwaiting Событие происходит, когда СМИ приостановлены, но ожидается возобновление (например, когда носитель делает паузу в буфере больше данных) 3

Анимация событий

Мероприятие Описание DOM
animationend Событие происходит, когда CSS анимация завершена 3
animationiteration Событие происходит, когда CSS анимация повторяется 3
animationstart Событие происходит, когда была начата CSS анимации 3

Переходные события

Мероприятие Описание DOM
transitionend Событие происходит, когда переход CSS завершен 3

Серверный Sent Events

Мероприятие Описание DOM
OnError Событие происходит, когда возникает ошибка с источником событий
OnMessage Событие происходит, когда сообщение получено через источник событий
OnOpen Событие происходит, когда соединение с источником событий открыто

Разное События

Мероприятие Описание DOM
OnMessage Событие происходит , когда сообщение получено через или от объекта (WebSocket, Web Worker, Event Source or a child frame or a parent window) 3
OnMouseWheel Устаревшее. Используйте onwheel событие вместо
ononline Событие происходит, когда браузер начинает работать в режиме онлайн 3
onoffline Событие происходит, когда браузер начинает работать в автономном режиме 3
onpopstate Событие происходит, когда изменяется история окна 3
OnShow Событие происходит , когда <menu> элемент отображается в контекстном меню 3
onstorage Событие происходит, когда веб-зона хранения обновляется 3
ontoggle Событие происходит , когда пользователь открывает или закрывает <details> элемента 3
onwheel Событие происходит, когда колесо мыши катится вверх или вниз над элементом 3

Сенсорные события

Мероприятие Описание DOM
ontouchcancel Событие происходит, когда прикосновение прерывается
ontouchend Событие происходит, когда палец удаляется с сенсорным экраном
OnTouchMove Событие происходит, когда палец тащили по экрану
ontouchstart Событие происходит, когда палец находится на сенсорном экране

Объект события

Константы

постоянная Описание DOM
CAPTURING_PHASE Текущая фаза события фаза захвата (1) 1
AT_TARGET Текущее событие в целевой фазе, т. е. он оценивается на цели события (2) 2
BUBBLING_PHASE Текущая фаза события является фазой восходящей цепочки (3) 3

свойства

Имущество Описание DOM
пузырьки Возвращает ли не конкретное событие является событием восходящей цепочки 2
отменяемый Возвращает ли не событие может быть его действие по умолчанию предотвращено 2
currentTarget Возвращает элемент, событие слушателей вызвал событие 2
defaultPrevented Возвращает или нет preventDefault() был вызван метод для события 3
EventPhase Возвращает какую фазу потока событий, в настоящее время оценивается 2
isTrusted Возвращает или не является доверенным событие 3
цель Возвращает элемент, который вызвал событие 2
TIMESTAMP Возвращает время (in milliseconds relative to the epoch) , на котором было создано событие 2
тип Возвращает имя события 2
Посмотреть Возвращает ссылку на объект Window, где произошедшего события 2

методы

метод Описание DOM
preventDefault() Отменяет событие, если оно отменяемое, а это означает, что действие по умолчанию, которое принадлежит к событию не произойдет 2
stopImmediatePropagation() Предотвращает других слушателей одного и того же события от призыва 3
stopPropagation() Предотвращает дальнейшее распространение события во время потока событий 2

MouseEvent Объект

Имущество Описание DOM
клавишу Alt Возвращает ли «ALT» была нажата клавиша , когда событие мыши было вызвано 2
кнопка Возвращает, какая кнопка мыши была нажата, когда событие мыши было вызвано 2
кнопки Возвращает какие кнопки мыши были нажаты, когда событие мыши было вызвано 3
clientX Возвращает горизонтальную координату указателя мыши, относительно текущего окна, когда событие мыши было вызвано 2
clientY Возвращает вертикальную координату указателя мыши относительно текущего окна, когда событие мыши было вызвано 2
ctrlKey Возвращает ли «CTRL» клавиша была нажата , когда событие мыши было вызвано 2
подробно Возвращает число, указывающее, сколько раз была нажата мышь 2
metaKey Возвращает ли «META» клавиша была нажата , когда событие было вызвано 2
pageX Возвращает горизонтальную координату указателя мыши, по отношению к документу, когда событие мыши было вызвано
Пейджи Возвращает вертикальную координату указателя мыши относительно документа, когда событие мыши было вызвано
relatedTarget Возвращает элемент, связанный с элементом, который вызвал событие мыши 2
ScreenX Возвращает горизонтальную координату указателя мыши, по отношению к экрану, когда событие было вызвано 2
Screeny Возвращает вертикальную координату указателя мыши относительно экрана, когда событие было вызвано 2
shiftKey Возвращает ли «SHIFT» была нажата клавиша , когда событие было вызвано 2
который Возвращает, какая кнопка мыши была нажата, когда событие мыши было вызвано 2

KeyboardEvent объекта

Имущество Описание DOM
клавишу Alt Возвращает ли «ALT» была нажата клавиша , когда ключевое событие было вызвано 2
ctrlKey Возвращает ли «CTRL» была нажата клавиша , когда ключевое событие было вызвано 2
charCode Возвращает код символа Unicode ключа, инициировавшего событие OnKeyPress 2
ключ Возвращает значение ключа ключа, представленного события 3
ключевой код Возвращает код символа Unicode ключа, инициировавший OnKeyPress события, или код ключа Unicode ключа, инициировавшего OnKeyDown или OnKeyUp события 2
место нахождения Возвращает расположение клавиши на клавиатуре или устройства 3
metaKey Возвращает ли «meta» была нажата клавиша , когда ключевое событие было вызвано 2
shiftKey Возвращает ли «SHIFT» была нажата клавиша , когда ключевое событие было вызвано 2
который Возвращает код символа Unicode ключа, инициировавший OnKeyPress события, или код ключа Unicode ключа, инициировавшего OnKeyDown или OnKeyUp события 2

HashChangeEvent объекта

Имущество Описание DOM
NEWURL Возвращает URL документа, после того, как хэш был изменен
OLDURL Возвращает URL документа, до того, как хэш был изменен

PageTransitionEvent объекта

Имущество Описание DOM
сохранялось Возвращает ли веб-страница была кэшируются браузером

FocusEvent объекта

Имущество Описание DOM
relatedTarget Возвращает элемент, связанный с элементом, вызвавшего событие 3

AnimationEvent объекта

Имущество Описание DOM
animationName Возвращает имя анимации
пройденное время Возвращает количество секунд анимация была запущена

TransitionEvent объекта

Имущество Описание DOM
Имя свойства Возвращает имя свойства CSS, связанное с переходом
пройденное время Возвращает количество секунд, переход был запущен

WheelEvent объекта

Имущество Описание DOM
DeltaX Возвращает величину горизонтальной прокрутки колеса мыши (x-axis) 3
deltaY Возвращает количество вертикальной прокрутки колеса мыши (y-axis) 3
deltaZ Возвращает количество прокрутки колеса мыши для оси 3
deltaMode Возвращает число, представляющую единицу измерения для значений дельты (pixels, lines or pages) 3

❮ Предыдущая Следующая Ссылка ❯

События мыши

Откройте для себя основы работы с событиями мыши в JavaScript.

Подробнее о событиях JavaScript

При просмотре событий мыши у нас есть возможность взаимодействовать с

  • mousedown кнопка мыши была нажата
  • mouseup кнопка мыши была отпущена
  • клик событие клика
  • dblclick событие двойного щелчка
  • mousemove при наведении мыши на элемент
  • mouseover при наведении мыши на элемент или один из его дочерних элементов
  • mouseenter
    при наведении мыши на элемент. Аналогично при наведении курсора , но не всплывает (подробнее об этом позже!)
  • mouseout когда мышь перемещается из элемента и когда мышь входит в дочерние элементы
  • mouseleave при перемещении мыши из элемента. Похоже на mouseout но не всплывает (подробнее об этом скоро!)
  • contextmenu при открытии контекстного меню, т. е. правой кнопкой мыши нажмите

События перекрываются. Когда вы отслеживаете событие click , это похоже на отслеживание события mousedown , за которым следует событие mouseup . В случае dblclick , click также срабатывает два раза.

mousedown , mousemove и mouseup можно использовать в комбинации для отслеживания событий перетаскивания.

Будьте осторожны с mousemove , так как он срабатывает много раз во время движения мыши. Нам нужно применить дросселирование , о чем мы поговорим подробнее, когда будем анализировать прокрутку.

Внутри обработчика событий у нас есть доступ к множеству свойств.

Например, в событии мыши мы можем проверить, какая кнопка мыши была нажата, проверив свойство кнопки объекта события:

 константная ссылка = document.getElementById('моя-ссылка')
link. addEventListener('mousedown', событие => {
  // кнопка мыши нажата
  console.log(event.button) //0=слева, 2=справа
}) 

Вот все свойства, которые мы можем использовать:

  • altKey true, если клавиша alt была нажата при запуске события
  • кнопка
    , если есть, номер кнопки, которая была нажата при срабатывании события мыши (обычно 0 = основная кнопка, 1 = средняя кнопка, 2 = правая кнопка). Работает с событиями, вызванными нажатием кнопки (например, щелчки)
  • кнопки , если есть, число, указывающее кнопку (кнопки), нажатые при любом событии мыши.
  • clientX / clientY координаты x и y указателя мыши относительно окна браузера, независимо от прокрутки
  • ctrlKey Истинно, если клавиша ctrl была нажата во время запуска события
  • metaKey true, если метаклавиша была нажата при запуске события
  • движениеX / движениеY координаты x и y указателя мыши относительно положения последнего события mousemove. Используется для отслеживания скорости мыши при перемещении вокруг
  • регион используется в Canvas API
  • relatedTarget вторичная цель для события, например при перемещении
  • screenX / screenY координаты x и y указателя мыши в координатах экрана
  • shiftKey true, если при запуске события была нажата клавиша Shift

Three.js Journey — события мыши с R3F

Введение 00:00

Этот урок называется «события мыши», чтобы прояснить ситуацию, но на самом деле он имеет дело с «событиями указателя» в целом, поскольку то, что мы увидим, также будет работать с сенсорными экранами.

Из практических соображений мы будем демонстрировать только использование мыши (или трекпада), но не стесняйтесь протестировать этот урок на своем телефоне или любом другом устройстве, к которому у вас есть доступ.

В стартере у нас есть оранжевая сфера, анимированный фиолетовый куб и зеленый пол.

9Зависимость 0157 @react-three/drei уже установлена ​​в проекте, и мы используем помощник OrbitControls , чтобы иметь возможность перемещать камеру.

Мы не использовали Perf , так как у нас не должно быть проблем с производительностью, но вы можете добавить его, если хотите.

Прослушивание событий кликов 00:44

Как обсуждалось в предыдущих уроках, обработка событий мыши была немного сложной. Нам понадобился Raycaster, отбрасываем несколько лучей (иногда в каждом кадре) и тестируем пересекающиеся объекты, которые нам нужно было поместить в массивы и т. д.

R3F значительно упростил этот процесс, и нам даже не нужно реализовывать Raycaster.

Начнем с прослушивания события click.

Все, что нам нужно сделать, это добавить атрибут onClick к объекту в нашей сцене (например, ) и предоставить ему функцию.

Мы можем отправить функцию напрямую или создать ее заранее.

В Experience.jsx создайте функцию eventHandler до:

 экспортировать функцию по умолчанию Experience()
{
    // ...
    константный обработчик событий = () =>
    {
        console.log('событие произошло')
    }
    // ...
} 

Мы выбрали общее имя для функции ( eventHandler ), так как собираемся использовать его для тестирования других событий. Но для реальных проектов не забудьте назвать свою функцию чем-то понятным, например cubeClickHandler .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *