Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перемещение мыши
 
 автор: serenya1983   (24.02.2010 в 03:45)   письмо автору
 
 

установил событие document.onmousemove на функцию.

и есть например:
<div onmouseover='по этому событию появляется элемент со координатами diva'
onmouseout='тут исчезает'>...</div>
после того как элемент появляется для того что бы можно было по нему водить мышкой события diva onmouseover & onmouseout повторяются!

Проблема в том что когда document.onmousemove стоит на функцию появившийся элемент мегает при перемещении по нему мышки? И наблюдается такое только в IE.


Код по которому устанавливаю document.onmousemove для IE:
if(isMSIE || isOpera7){
document.onmousemove=function(){
main_mousex=event.clientX+document.body.scrollLeft
main_mousey=event.clientY+document.body.scrollTop
return false;
}

Если убрать событие то не мегает (но оно нужно)!

С чем такое связано?

Еще заметил что когда водишь мышкой по div постоянно срабатывают события diva mouseout & mouseover - но ведь я не убераю мышь с него, почему события есть?

  Ответить  
 
 автор: АЯ   (24.02.2010 в 10:55)   письмо автору
 
   для: serenya1983   (24.02.2010 в 03:45)
 

Функцию на событие onmousemove на объект document нужно назначать динамически (с использованием методов attachEvent и addEventListener) и внутри этой функции надо предусмотреть её удаление после первого её запуска (используя методы detachEvent и removeEventListener).

  Ответить  
 
 автор: serenya1983   (24.02.2010 в 11:49)   письмо автору
 
   для: АЯ   (24.02.2010 в 10:55)
 

А если функция нужна на всё время работы страницы (почему не использовать document.onmousemove)?

И почему события mouseover & mouseout вызывается для объекта когды мышь перемещается по нему???

  Ответить  
 
 автор: АЯ   (24.02.2010 в 14:09)   письмо автору
 
   для: serenya1983   (24.02.2010 в 11:49)
 

>"А если функция нужна на всё время работы страницы"

Значит, её нужно ЗАНОВО подключать после того, как она отработает свою функциональность*
-----

>"почему события mouseover & mouseout вызывается для объекта когды мышь перемещается по нему?"

Потому что ВСЯКОЕ движение мыши порождает "новый" DIV на месте "существующего" (того, который был создан раньше). И этот "новый" DIV перекрывает "существующий". Из-за этого перекрытия на "существующем" срабатывает onmouseout, а на "новом" - onmouseover.

Вам надо сделать следующим образом:
1. На документ по onload динамически навешиваете функцию_1 на событие onmousemove, которая порождает див.
2. В момент порождения дива функция_1 должна быть ликвидирована.
3. На порожденный див навешиваете функцию_2 на событие onmouseout.
4. Сработав, функция_2 снова навешивает на документ функцию_1

  Ответить  
 
 автор: serenya1983   (25.02.2010 в 20:19)   письмо автору
 
   для: АЯ   (24.02.2010 в 14:09)
 

Нужно всегда знать положение мыши на каждое её движения на всё время пока открыта страница, т.е. я так понял надо поставить функцию на событие через attachEvent, в функции отключить обработку события и в конце опять подключить, так???

И почему моргает только в IE?

Т.е. смысл примерно такой:

есть два div:
<div onmouseover='id_div.style.display="block" ' onmouseout=''id_div.style.display="none" '>...</div>
<div id='id_div' style='position:absolute;'>...</div>

Div с id = id_div мограет (только в IE) когда есть код (см. ниже)

function mousemove(x,y)
{
тут обрабтчик нужный всё время пока открыта страница
}

if(isMSIE || isOpera7){
document.onmousemove=function(){
e=event.clientX+document.body.scrollLeft
y=event.clientY+document.body.scrollTop
mousemove(x,y);
return false;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования