#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть действие .hover (), назначенное элементу, чтобы скрыть / показать что-то в зависимости от наведения курсора на него. Проблема, с которой я сталкиваюсь, заключается в том, что когда страница загружается и курсор находится над элементом, он не регистрируется как завершенный, потому что он не запускает событие mouseenter.
Есть ли другой способ определить, находится ли курсор над нужным элементом?
Комментарии:
1. Проблема в том, что я не знаю способа (или Google, похоже, знает) получить координаты мыши без того, чтобы пользователь перемещал мышь. Возможно, это ограничение, с которым вам придется смириться или обойти.
2. Полагаю, я пришел сюда за помощью в обходе.
3. Когда я говорю, что вам нужно будет обойти это, я не имею в виду, что вам нужно реализовать обходной путь (насколько я вижу, он не очень хороший). Я имел в виду, что вам придется обойти это в том, что касается вашего дизайна и взаимодействий.
4. Если это важно для вас, поместите курсор куда-нибудь, определенное при загрузке. установите фокус где-нибудь.
Ответ №1:
Используя положение мыши при загрузке страницы, вы могли бы вызвать
var currentElement = document.elementFromPoint(x, y);
тогда, если элемент, найденный в этой позиции, является элементом с событием наведения. Вы можете запустить это событие наведения курсора вручную
$(currentElement).trigger('hover');
Комментарии:
1. Проблема в этом — как вы получаете положение мыши при загрузке страницы, не перемещая мышь? Каждый пример, который я видел онлайн, показывает использование
mousemove
обработчика.2. Я не верю, что вы можете … вы могли бы проверить событие onload и посмотреть, действительно ли оно предоставляет координаты мыши x и y, но я полагаю, что этого не произойдет. вы должны подождать, пока мышь немного переместится, прежде чем это сработает.
3. onload не предоставляет таких данных о событии.
Ответ №2:
Если вы скроете элемент (ы) до завершения загрузки страницы, а затем покажете их все сразу, сработает ли теперь ваше событие наведения курсора мыши?
<div id='allmyelementsinhere' style='display:none'>
затем используйте javascript, чтобы удалить отображение: отсутствует при загрузке страницы.
Я думаю, что ваше mouseevent запустится, как только вы отобразите элементы.
Ответ №3:
У меня также была эта проблема с кнопками навигации next и previous, которые перемещаются между последовательно оформленными страницами.
Пользователь нажимал кнопку Далее, чтобы перейти на следующую страницу, и поскольку его мышь находилась в том же положении при загрузке страницы второй страницы, он мог снова нажать кнопку Далее, чтобы продолжить навигацию по коллекции страниц. По сути, удобный пользовательский интерфейс next / previous.
За исключением, конечно, того, что состояние наведения не отображалось при загрузке страницы для второй и последующих страниц.
Итак, я добавил параметр url (action = ‘next или action = prev), а затем при загрузке я перевожу следующую или предыдущую кнопку в состояние наведения курсора, если присутствует соответствующий параметр url. Если пользователь каким-то образом переместил свою мышь и не находится над кнопкой, то вы неправильно получаете кнопку в состоянии наведения до первого события mousemove.
Он не идеален и подходит только для тех конкретных обстоятельств, когда пользователь использует согласованный пользовательский интерфейс на страницах вашего сайта, но поскольку этот тип пользовательского интерфейса довольно распространен, особенно в блогах / галереях, я бы упомянул об этом.
Ответ №4:
Вот метод jquery для отслеживания положения мыши, начиная с загрузки страницы.
(function($) {
$.mousePos = {x: 0, y: 0};
var recordPos = function(e) {
$.mousePos.x = e.pageX;
$.mousePos.y = e.pageY;
};
$(document).mousemove(recordPos).mouseover(recordPos);
})(jQuery);
Это приведет к заполнению $.mousePos.x и $.mousePos.y как только мышь начнет взаимодействовать со страницей.
Ответ №5:
Комментарии:
1. Это та же проблема. Загрузите эту страницу и не двигайте мышью. Значения остаются равными нулю (по крайней мере, для меня). Ключом является строка
document.onmousemove = getMouseXY;
2. Как именно это происходит при загрузке? Держите мышь на месте, и в полях будут отображаться 0 и 0.
3. Я тестировал в Chrome и IE8, и для обоих без перемещения мыши это сработало.
4. Честно говоря, это, кажется, работает в IE8 и FF — но в chrome есть 5-секундная задержка, поэтому я не увидел ее в первый раз. Своего рода противоречит цели.
5. Я думаю, ключевая строка, которую я пропустил, была
if (!IE) document.captureEvents(Event.MOUSEMOVE)