Javascript запускать функцию при наведении. Создаем собственные события при наведении мыши с помощью javascript кода. События mousedown, mouseup и click

Все действия пользователя при взаимодействии с приложением сводятся к перемещению мыши, нажатию кнопок мыши и нажатию клавиш клавиатуры. Рассмотрим обработку в приложении событий, связанных с этими манипуляциями пользователя.

События мыши Последовательность событий

В компонентах Delphi определен ряд событий, связанных с мышью. Это события:

OnClick Щелчок мыши на компоненте и некоторые другие действия пользователя.

OnDblClick Двойной щелчок мыши на компоненте.

OnMouseDownНажатие клавиши мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши

OnMouseMoveПеремещении курсора мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши.

OnMouseUpОтпускание ранее нажатой кнопки мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши

OnStartDragНачало процесса перетаскивания объекта. Возможно распознавание перетаскиваемого объекта.

OnDragOverПеремещение перетаскиваемого объекта над компонентом. Возможно распознавание перетаскиваемого объекта и координат курсора мыши.

OnDragDropОтпускание ранее нажатой кнопки мыши после перетаскивания объекта.Возможнораспознавание перетаскиваемого объекта и координат курсора мыши.

OnEndDragЕще одно событие при отпускании ранее нажатой кнопки мыши послеперетаскиванияобъекта. Возможно распознавание перетаскиваемого объекта и координат курсора мыши.

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

OnExitСобытие в момент потери элементом фокуса в результате манипуляции мышью,нажатияклавиши табуляции или программной передачи фокуса

OnMouseWheelСобытие при вращении колесика мыши в любую сторону. Начиная с Delphi 5

OnMouseWheelUpВращение колесика мыши вверх. Наступает, если вращение необработанопо событиюOnMouseWheel. Начиная с Delphi 5.

OnMouseWheelDown Вращение колесика мыши вниз. Наступает, если вращение необработанопо событию ОnМоuseWheel. Начиная с Delphi 5.

Как видно, эти события охватывают все мыслимые манипуляции с мышью и даже дублируют многие из них. Наиболее широко используется событие OnClick. Обычно оно наступает, если пользователь щелкнул на компоненте, т.е. нажал и отпустил кнопку мыши, когда указатель мыши находился на компоненте. Но это событие происходит также и при некоторых других действиях пользователя. Оно наступает, если:

Пользователь выбрал элемент в сетке, дереве, списке, выпадающем списке, нажав клавишу со стрелкой.

Пользователь нажал клавишу пробела, когда кнопка или индикатор были в фокусе.

Пользователь нажал клавишу Enter, а активная форма имеет кнопку по умолчанию, указанную свойством Default.

Пользователь нажал клавишу Esc, а активная форма имеет кнопку прерывания, указанную свойством Cancel.

Пользователь нажал клавиши быстрого доступа к кнопке или индикатору. Например, если свойство Caption индикатора записано как “&Полужирный” и символ "П" подчеркнут, то нажатие пользователем комбинации клавиш Alt-П вызовет событиеOnClick в этом индикаторе.

Приложение установило в true свойствоChecked радиокнопкиRadioButton.

Приложение изменило свойство Checked индикатораCheckBox.

Вызван метод Click элементаменю.

Для формы событие OnClick наступает, если пользователь щелкнул на пустом месте формы или на недоступном компоненте.

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

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

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

Таблица 1. Последовательность событий мыши при переключении фокуса

Действие пользователя

Перемещение курсора мыши в пределах первого компонента

Множество событий OnMouseMove в первом компоненте

Перемещение курсора мыши в пределах формы

Множество событий OnMouseMove в форме

Перемещение курсора мыши в пределах второго компонента

Множество событий OnMouseMove во втором компоненте

Нажатие кнопки мыши

OnExit в первом компоненте

ОnEnter во втором компоненте

OnMouseDown во втором компоненте

Отпускание кнопки мыши

OnClick во втором компоненте

OnMouseUp во втором компоненте

События OnMouseMove происходят постоянно в процессе перемещения курсора мыши и даже просто при его дрожании, неизбежном, если пользователь не снимает руки с мыши. Это надо учитывать и пользоваться этим событием очень осторожно, поскольку оно, в отличие от других, происходит многократно.

Как видно из приведенной таблицы, каждое действие пользователя, связанное с нажатием или отпусканием кнопки мыши приводит к серии последовательно наступающих событий. В обработчиках событий OnMouseDown и OnMouseUp можно распознать, какая кнопка мыши нажата и в какой точке компонента находится в данный момент курсор мыши.

Рассмотренная в табл. 1 последовательность событий имеет место, если во втором компоненте свойство DragMode равно dmManual (ручное начало процесса перетаскивания), как это установлено по умолчанию. Если же это свойство равноdmAutomatic (автоматическое начало процесса перетаскивания), то все рассмотренные события, связанные с манипуляцией мышью, заменяются следующими:

ОnMouseDоwn Заменяется на OnStartDrag

Если кнопку нажали и курсор мыши перемещают, то

OnMouseMove Заменяется на событие OnDragOver того компонента, над которым перемещается курсор мыши

OnMouseUp Заменяется на событие OnDragDrop компонента, над которым завершается перетаскивание (если компонент может воспринять информацию от перетаскиваемого объекта), и последующее событие OnEndDrag компонента, который перетаскивался

События OnExit иOnEnter вообще не возникают, поскольку переключения фокуса не происходит. Не наступает также событиеOnClick.

Если в примере, приведенном в табл.1, щелчок делается на объекте, который уже находится в этот момент в фокусе, то не происходят события OnExit иOnEnter. В этом случае при нажатии кнопки наступает только событиеOnMouseDown, а при отпускании кнопки - событияOnC li ck и OnMouseUp.

Теперь рассмотрим последовательность событий при двойном щелчке на компоненте. Она приведена в табл. 2. Распознавать нажатую кнопку мыши по-прежнему можно только в событиях OnMouseDown и OnMouseUp. Если же надо распознать именно двойной щелчок какой-то определенной кнопкой мыши, то можно, например, ввести некую переменную, являющуюся флагом двойного щелчка, устанавливать этот флаг в обработчике событияOnDblClic k , а вобработчиках событийOnMouseDown или OnMouseUp проверять этот флаг и, если он установлен, то сбрасывать его и выполнять запланированные действия.

Таблица 2. Последовательность событий мыши при двойном щелчке на компоненте

Действие пользователя

Первое нажатие кнопки мыши

OnMouseDown. Возможно распознавание нажатой кнопки и координат курсора мыши.

Первое отпускание кнопки мыши

Второе нажатие кнопки мыши

OnMouseDown. Возможно распознавание нажатой кнопки и координат курсора мыши.

Второе отпускание кнопки мыши

OnMouseUp. Возможно распознавание нажатой кнопки и координат курсора мыши.

В этой статье речь пойдет о Javascript событиях мыши. Эти события являются очень важными в Javascript и используются на каждом шагу. Сначала я расскажу вам о всех стандартных событиях связанных с мышкой: mousedown , mouseup , click , dblclick , mousemove и, наконец, mouseover и mouseout .

События mousedown, mouseup и click

Когда пользователь кликает на элемент, то срабатывает не меньше чем 3 события мыши в таком порядке:

  • mousedown , пользователь нажал кнопку мыши на элементе
  • mouseup , пользователь отпустил кнопку мыши на элементе
  • click , обнаружены события mousedown и mouseup на элементе
  • В основном события mousedown и mouseup более полезны нежели click . Иногда пользователь кликает мышкой, но событие click не срабатывает.

    Предположим, что пользователь нажал кнопку на ссылке, потом отвел курсор куда-то в сторону и отпустил кнопку. Ссылка обработала только mousedown событие. Также можно возпроизвести и противоположную ситуацию когда пользователь нажимает кнопку мыши, а потом наводит курсор на ссылку и отпускает кнопку. Срабатывает только mouseup событие. В остальных случаях срабатывает click .

    Так или иначе, эта проблема возникает только если Вы сами этого захотите Вы должны зарегистрировать обработчики событий onmousedown/up , но в большинстве случаев хватает события click .

    Помните, что если вы используете alert"ы, то браузер может запутаться и потерять порядок выполняющихся событий и количество их вызовов.

    Событие dblclick (двойной клик)

    Событие dblclick используется намного реже всех остальных событий мыши. Если Вы всетаки используете его, убедитесь в том, что не используете обработчики событий onclick и ondblclick для одного и того же HTML элемента. Определить что сделал пользователь практически невозможно в таком случае.

    Когда пользователь делает двойной клик на элементе сначала срабатывает событие click и только потом dblclick . Использование alert сообщений здесь также крайне опасно.

    Mousemove событие

    Событие mousemove работает нормально, но Вы должны помнить, что обработка такого рода событий может занимать некоторое количество времени. Событие mousemove срабатывает когда пользователь передвигает курсор мыши на один пиксель. Казалось бы ничего особенного не происходит, но внутри есть сложные функции, процес выполнение которых занимает длительный промежуток времени. Это может привести к нестабильной работе сайта. Поэтому лучше всего использовать обработчик события onmousemove , только там, где это действительно нужно, и обязательно удалять его в будущем.

    Element.onmousemove = doSomething;
    // позже
    element.onmousemove = null;

    Mouseover и mouseout события

    Давайте рассмотрим небольшой пример. Попробуйте поводить курсор мышки поверх элементов с разным фоном. Элемент 1 должен слегка мигать при наведении на него курсором - это срабатывает событие mouseover .

    Element№1

    Element№2 span

    Тем не менее, как Вы видите, это событие срабатывает и при наведении курcора мыши на элемент№2 и даже span.

    Причина такого поведение в том, что событие установленное на первый элементы также применяется к его дочерним нодам. Все предельно ясно, но проблема возникает тогда, когда нам надо совершить какое-то действие при переходе курсора мышки, например, от элемента span к элементу№2.

    "Откуда пришла мышь?" или свойства relatedTarget, fromElement и toElement

    Microsoft создали два ствойства чтобы хранить эту информацию:

    • fromElement - относится к элементу от которого пришла мышь.
    • toElement - к элементу к которому пришла мышь.
    Кроссбраузерный код

    И так если Вы хотите знать откуда пришла мышка используя событие mouseover , ипользуйте следующий скрипт:

    Function doSomething(e) {
    var relTarg = e.relatedTarget || e.fromElement;
    }

    В случае ипользования события mouseout (элемент, к которому движется курсор):

    Function doSomething(e) {
    if (!e) var e = window.event;
    var relTarg = e.relatedTarget || e.toElement;
    }

    Mouseenter и mouseleave

    Microsoft предлагает другой способ решения проблемы. Они создали 2 новых события mouseenter и mouseleave . Эти события имеют такое же поведение как mouseover и mouseout . Единственно отличие - это то, что события не "перепрыгивают" на дочерние элементы. Это очень хорошо решает нашу проблему, представленную в примере.

    Ну вот и все о чем я хотел рассказать касательно Javascript событий мыши. С удовольствием отвечу на ваши комментарии.

    Доброго времени суток, любознательные подписчики и гости блога. Сегодня мы разберем с вами полезный раздел в прототипно-ориентированном сценарном языке, а именно событие при наведении мыши JavaScript.

    Я хочу, чтобы вы хорошенько разобрались в таких событиях, как click, mouseup, mousedown, mouseover и других, поняли разницу между ними и научились их использовать для решения поставленных задач. Конечно же после каждого ключевого теоретического материала вы сможете найти программную реализацию примеров. Ну что ж, приступим!

    Все сведенья о событиях мышки

    Для мыши существует несколько событий, которые полностью охватывают всевозможные действия курсора на странице . Среди них есть те, которые срабатывают при нажатии на объект, наведении на него или движении указателя по открытому окну. Их все можно поделить на две группы: простые и комплексные (составные) события.

    Начнем с простого

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

    Наименование Описание
    mousedown Названный event вызывается, когда одна из кнопок мышки нажата, но пока еще не отпущена.
    mouseup А этот срабатывает уже при отпускании зажатой ранее кнопочки.
    mouseover Вызывается при наведении курсора на обрабатываемый объект.
    mouseout Обрабатывает действие выхода курсора из области элемента.
    mousemove Любое движение указателя над определенной областью вызывает текущее событие.

    Ну а теперь для закрепления материала разберем пример. Я создал небольшую программку, в которой изменяются эмоции смайла при наведении и отведении курсора.

    Наведите на изображение курсор мыши и оно изменится. А теперь отведите его в сторону и понаблюдайте за изменениями function ChangeOver(x) { x.src= "http://storage2.vsemayki.ru/images/0/0/514/514012/previews/sign_front_white_500.jpg"; }; function ChangeOut(x) { x.src= "http://storage2.vsemayki.ru/images/0/0/514/514102/previews/sign_front_white_500.jpg"; }

    Пришло время группировки

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

    Почему же так? Ответ достаточно прост.

    Обработка событий происходит с какой-то максимально допустимой скоростью. И при этом не стоит забывать, что события обрабатываются по очереди. А значит при слишком быстром нажатии на разные элементы цепочка обработки может не выполниться полностью.

    Итак, ниже перечислены составные события.

    Как вы уже поняли, комплексные события несколько упрощают жизнь разработчиков, включая в себя сразу набор необходимых простых event-ов. Вследствие этого на сегодняшний день никто не может представить обычной обработки кнопок или других элементов без того же click .

    Для практического ознакомления с функционированием выше перечисленных событий я модифицировал предыдущее приложение. Проанализируйте результат моей работы.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Пример наведения указателя на элемент страницы

    Пример наведения указателя на элемент страницы Нажмите на меня один раз и смайл улыбнется! А теперь нажмите на меня двойным кликом и смайл начнет двигаться! Если хочешь вернуться к начальному состоянию, то нажми на меня правой кнопкой! function Smile() { document.getElementById("pic").src= "http://storage2.vsemayki.ru/images/0/0/514/514012/previews/sign_front_white_500.jpg"; }; function Cry() { document.getElementById("pic").src= "http://storage2.vsemayki.ru/images/0/0/514/514102/previews/sign_front_white_500.jpg"; }; function Move() { document.getElementById("pic").src= "https://otvet.imgsmail.ru/download/197747824_e708b2123d2b2d745d271f15cb144dcc_800.gif"; };

    Как видите, все очень просто. Данные элементы легко вызывать в коде и привязывать их к определенным действиям.

    SSH (англ. Secure SHell - «безопасная оболочка») - сетевой протокол сеансового уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Схож по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем.

    SSH позволяет безопасно передавать в незащищенной среде практически любой другой сетевой протокол. Таким образом, можно не только удаленно работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры). Также SSH может использовать сжатие передаваемых данных для последующего их шифрования, что удобно, например, для удаленного запуска клиентов X Window System.

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

    Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Тату Улёненом из Технологического университета Хельсинки, Финляндия. SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, несовместимая с SSH-1. Протокол приобрел ещё большую популярность, и к 2000 году у него было около двух миллионов пользователей. В настоящее время под термином «SSH» обычно подразумевается именно SSH-2, т.к. первая версия протокола ввиду существенных недостатков сейчас практически не применяется.