Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   проблема с e.target.tagName и е.relatedTarget.tagName (https://javascript.ru/forum/events/6852-problema-s-e-target-tagname-i-e-relatedtarget-tagname.html)

morfie 27.12.2009 13:20

проблема с e.target.tagName и е.relatedTarget.tagName
 
есть блоки при mouseover они увеличиваются и mouseout уменьшаются.

но при наведение на элементы 'span, a' внутри них, выполняется события mouseover, mouseout.


мое решение:
el = event.target.tagName;
elREL = event.relatedTarget.tagName

if (el! = 'A' & & elREL! = 'A' & & el! = 'TD' & & el! = 'TABLE' & & elREL! = 'TD') (код ....}


но оно не практическое подскажите правильное пожалуйста










function resize_expanse(ob,w,h)
{


clearTimeout('time2')
function sama_znik(){

if(w<=320 && h<=220){

ob.style.width=w;
ob.style.height=h;

w=w+4
h=h+4

time=setTimeout(sama_znik,30)

}
}
sama_znik()
}






function resize_reduction(ob,w,h)
{


clearTimeout('time')
function sama_znik(){

if(w>300 && h>200){

ob.style.width=w;
ob.style.height=h;

w=w-4
h=h-4

time2=setTimeout(sama_znik,30)

}
}
sama_znik()
}




и хтмл



<span id="COOL_block" >

<div id="box3" onmouseover=' resize_expanse(this,300,200)'
onmouseout='resize_reduction(this,320,220)'>

<a href="#"> ссылка</a>

<span>еще что-то</span>

</div>
</span>

micscr 27.12.2009 14:29

Если нативным JS не подскажут то
в jQuery есть как раз для этого следующие события:
$('...').mouseenter(fn);
$('...').mouseleave(fn);

haha 27.12.2009 14:58

Можно сделать небольшую задержку перед началом анимации. Нужна она для запуска анимации после проверки какого-нибудь флажка, который и будет переключаться на mouse(over|out). Бонус: если будет быстрое случайное проведение по объекту, то анимации не будет.

var waiter,flag; //глобальные для этих функций

function expande(){ if(flag)resize_expanse() }
function reduce(){ if(!flag)resize_reduction() }

function anim_over(){//забиндить на mouseover
 flag = true;
 clearTimeout(waiter);
 waiter = setTimeout(expande,50);
}

function anim_out(){//на mouseout
 flag = false;
 clearTimeout(waiter);
 setTimeout(reduce,50);
}

Но все равно, легче через фреймворк, потому что эти функции начнут соперничать друг с другом. А как это предотвратить - целая статейка.
Проверка тегов будет не нужна.

subzey 27.12.2009 18:19

Все, что Вам нужно — это проверять, является ли relatedTarget вложенным в отслеживаемый объект. И если да, то функции ничего не делать.

morfie 27.12.2009 19:41

мне не удалось таким методом сделать.я плохо знаю js.

распишите подробнее или дайти ссылку где можно такое изучить


Часовой пояс GMT +3, время: 04:17.