Как отслеживать положение мыши при загрузке страницы, а также при перемещении мыши?

#javascript #mouse #mouseevent

#javascript #мышь #mouseevent

Вопрос:

Я отслеживаю движения мыши, используя следующий JavaScript:

 var mouseX = 0;
var mouseY = 0;

document.onmousemove = function (e) {
    mouseX = e.clientX;
    mouseY = e.clientY;
}
  

Моя проблема в том, что если мышь не перемещалась с момента загрузки страницы, значения mouseX и mouseY оба равны 0. Как я могу получить значения мыши при загрузке страницы, а также при перемещении мыши?

Комментарии:

1. Я полагаю, вы не можете этого знать. Но разве не возможно отказаться от первого движения и начать со второго? Например, вы начинаете с mouseX = mouseY = null , и в случае, если они null когда onmousemove срабатывают, просто игнорируйте этот первый случай.

2. docs.jquery.com/Tutorials:Mouse_Position

3. Под «загрузкой страницы» вы имеете в виду, когда документ готов или когда загружено окно? Это два отдельных случая.

4. pimvdb: нет, этого недостаточно, мне нужно знать, где находится мышь, даже если она еще не переместилась! Я думаю, что моим решением будет использовать событие onload, но цикл в сочетании с циклом settimeout, если страница еще не полностью загружена.

5. @MarcB это тоже не делает этого для него. Если вы заметили, что когда страница загружена, а мышь не перемещается, значения равны 0, 0.

Ответ №1:

Браузер не знает, где находится мышь, пока она не переместится.

Это сложнее, чем просто «укажите мне положение курсора». Что, если мыши нет (планшет) или что, если мышь не находится над окном браузера?

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

Перейдите на какой-нибудь сайт, наведите курсор на ссылку, которая имеет эффект наведения курсора (например, подчеркивание), обновите страницу (не перемещая курсор), и вы увидите, что даже если ваш курсор наведен на ссылку, он не получает наведение курсора, пока вы не переместите курсор.

К сожалению, это проблема уровня браузера, а не проблема javascript.

Комментарии:

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

2. @Tim Down: Кажется устаревшим? Работает в Chrome, Firefox, Opera, IE9 и новее. По крайней мере, в Windows.

3. @SuperNova: Я думаю, вы согласны со мной, если имеете в виду, что стиль наведения применяется после обновления в этих браузерах. На моем Mac стиль наведения применяется не в Chrome или Opera, а в Safari и Firefox.

Ответ №2:

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