Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Движение по элементам блока без перезапуска функции выпадающеего меню. (https://javascript.ru/forum/dom-window/36887-dvizhenie-po-ehlementam-bloka-bez-perezapuska-funkcii-vypadayushheego-menyu.html)

tutelaris 30.03.2013 16:29

Движение по элементам блока без перезапуска функции выпадающеего меню.
 
Итак, у меня есть горизонтальное выпадающее меню. При наведении мышки на изображение, появляется блок и медленно разворачивается. Когда я перевожу мышку с изображения на блок, функция, которая выполняет разворачивание этого блока (увеличивает его высоту с интервалом в 20мс по 1px) снова запускается. И так при переводе на каждый элемент блока. Можно ли как-нибудь сделать, чтобы он работал едино? То есть, чтобы при наведении на блок, на изображение, которое вызывает появление блока, и на элементы блока выполнялась одна и та же функция? Объединить в один div нельзя по причине структуры сайта. Вот код, в котором, я думаю, и находится ошибка:
<a href="main.htm" class="ex1" onMouseOver="over('list');" onMouseOut="out('list');">
			<img src="img/buttons/main.png">
			<div id="list" onMouseOver="over('list');" onMouseOut="out('list');">
				<a href="#"><img src="img/buttons/menu1.png"></a>
				<br><a href="#"><img src="img/buttons/menu2.png"></a>
			</div>
			</a>

Заранее благодарю за ответ.

danik.js 30.03.2013 16:36

проверять event.toElement || event.relatedTarget если не ошибаюсь

zilker 30.03.2013 16:37

Используйте события mouseenter/mouseleave. Но они не кроссбраузерные, подробнее здесь - http://learn.javascript.ru/mousemove...-и-mouseleave

tutelaris 30.03.2013 17:10

Спасибо, сейчас почитаю эти статейки и попробую)

tutelaris 26.04.2013 09:15

Возможно, я слишком глуп, но я не смог разобрался. У меня такой код:
function over(objId) {
var obj=document.getElementById(objId);
obj.style.display="block";
opacity=0.0;
	setTimeout(function frame() {
		if (opacity<=1.0) {
			opacity=opacity + 0.1;
			obj.style.opacity=opacity;
			time=setTimeout(frame, 10);
		}
	} , 10);
}

И мне нужно, чтобы при переходе с элемента, который вызывает функцию сверху, на тот блок, который появляется, функция продолжала свою работу, а не прерывалась и не начиналась заново.
Я прочитал те статьи с событиями relatedTarget, fromElement и toElement. Понял, что нужно использовать такую конструкцию:
function doSomething(e) {
    if (!e) var e = window.event;
    var relTarg = e.relatedTarget || e.toElement;
}

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


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