Jump to content
  • 0

Постоянная генерация события mousemove в Chrome


Azerus
 Share

Question

Однажды, делая jQuery презентацию через fadeIn-fadeOut встала задача ее запуска лишь после того, как пользователь подвигает курсором мыши по странице. Проверку построил через событие mousemove.

Все это везде прекрасно работало, кроме Chrome, он почему-то сам постоянно генерировал сие событие. Даже когда курсор находился на одном месте – событие происходило.

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

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

Есть ли более культурное решение данной проблемы, нежели проверка координат, может еще у кого такое было?

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0
  On 11/8/2012 at 8:54 AM, Azerus said:

Однажды, делая jQuery презентацию через fadeIn-fadeOut встала задача ее запуска лишь после того, как пользователь подвигает курсором мыши по странице. Проверку построил через событие mousemove.

Все это везде прекрасно работало, кроме Chrome, он почему-то сам постоянно генерировал сие событие. Даже когда курсор находился на одном месте – событие происходило.

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

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

Есть ли более культурное решение данной проблемы, нежели проверка координат, может еще у кого такое было?

Если бы был пример с воспроизведением бага, было бы намного интереснее в нем покопаться и поискать решение...

Выложите на jsfiddle.net тестовый код

Link to comment
Share on other sites

  • 0
  On 11/8/2012 at 9:27 AM, s0rr0w said:

Если бы был пример с воспроизведением бага, было бы намного интереснее в нем покопаться и поискать решение...

Выложите на jsfiddle.net тестовый код

Выложил тут jsfiddle.net/fvPQE/6/ При mousemove на блок - выводится алерт, но выводится он даже в том случае, когда курсор по блоку не двигается...

Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 10:02 AM, hypnocolor said:

С таким-то кодом? Не может быть. Наверняка, у вас какой-то неправильный хром. И закрывающий </html>, к слову, должен находиться в самом конце.

С </html> ошибся, а на счет Хрома - хз, обновленный же... У вас событие не генерится?

Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 10:28 AM, Azerus said:

С </html> ошибся, а на счет Хрома - хз, обновленный же... У вас событие не генерится?

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

Edited by hypnocolor
Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 10:46 AM, hypnocolor said:
  On 11/9/2012 at 10:28 AM, Azerus said:

С </html> ошибся, а на счет Хрома - хз, обновленный же... У вас событие не генерится?

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

Да, оно работает только при наведении на див, но на сколько я понимаю принцип mousemove - оно должно работать лишь когда курсор двигается, а не стоит на месте. Если навести мышь на див - появится первый алерт, и если оставить курсор на месте (не двигать), в зоне дива, то алерты все-равно появляются один за другим.

Или же я просто не понял принцип самого mousemove...

Link to comment
Share on other sites

  • 0

Пройдя по вашем примеру у меня тоже генерировалось событие, если курсор находился на элементе, вне зависимости от того, двигал ли я мышью после закрытия диалогового окна(алерта). Переписав код http://jsfiddle.net/wxJ5M/2/ можно увидеть, что событие работает как надо, похоже во всем виноват алерт в хроме.

--добавление:

Клик по элементу считается за движение, поэтому нажимая мы провоцируем(какое слово не уместное наверное) событие, дело не в алерте.(а в клике)

Так, например, в алерте нажимая кнопку крестик или "ОК",если под ним элемент с событием, мы провоцируем еще один вызов события. Может дело в этом?

Edited by moron
Link to comment
Share on other sites

  • 0

Спасибо, но все по прежнему)

2 moron Я закрываю алерт нажатием ентера, поэтому никакого движение при этом нету. В вашем примере у меня счетчик все так же неумолимо растет, независомо от того, двигается курсор или нет.

2 hypnocolor Теперь алерт выскакивает с интервалом в 2секунды:)

Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 12:04 PM, Great Rash said:

Да у вас с мышкой поди проблема... После первого алерта выдерните мышь из компа и мосмотрите что будет. :)

У меня мыши уже с пол года нету, только тачпад)

Link to comment
Share on other sites

  • 0

Тачпад значит глючит.

UPD: Чтобы исключть ложные срабатывания можно запоминать координаты мыши, и если модуль разницы больше чем, допустим, 5 пикселей, значит мышу точно подвинули.

UPD2: http://jsfiddle.net/86LH8/

Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 12:44 PM, Great Rash said:

UPD: Чтобы исключть ложные срабатывания можно запоминать координаты мыши, и если модуль разницы больше чем, допустим, 5 пикселей, значит мышу точно подвинули.

Я в принципе так и делал, и так оно работает. Просто интересно узнать, есть ли другое решение. :)

Link to comment
Share on other sites

  • 0
  On 11/9/2012 at 12:53 PM, Great Rash said:

Другого нет. Да и это не нужно, потому что все у всех, кроме вас, работает нормально :)

Видно, мой Хром, все-таки, особенный )))

...

Проверил только что код у друга в Хроме, та же беда)

Edited by Azerus
Link to comment
Share on other sites

  • 0

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

В любом случае - спасибо:)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy