Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Определение, есть ли мышка на диве: / 12 сообщений из 12, страница 1 из 1
03.11.2008, 12:12
    #35632116
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Есть див1. На нем абсолютом расположены еще мелкие некаторые дивы2. Так что получаеться когда мышка находит на эти мелкие дивы2, срабатывает onmouseover. А мне надо чтобы onmouseover срабатывал только когда мышка покидает область див1.

есть ли возможность как то это обойти?
Я попробовал в обработчик onmouseover вручную проверять не покинули ли область мышка, но что то не работает(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
t=(getPositionCursor().y>place_of_loading.clientTop);
t=t and (getPositionCursor().y<place_of_loading.clientTop+place_of_loading.clientHeight);
t=t and (getPositionCursor().x>place_of_loading.clientLeft);
t=t and (getPositionCursor().x<place_of_loading.clientLeft+place_of_loading.clientWidth);
if(t){
//творим что надо
}

//где getPositionCursor() нашел в яндексе:
function getPositionCursor() 
	{	
	e =  window.event;	
	var cursor = {x: 0 , y: 0 };	
	if (e.pageX || e.pageY) 
		{
		cursor.x = e.pageX;
		cursor.y = e.pageY;
		} 
	else 
		{
		cursor.x = e.clientX + 
		(document.documentElement.scrollLeft || 
		document.body.scrollLeft) - 
		document.documentElement.clientLeft;

		cursor.y = e.clientY + 
		(document.documentElement.scrollTop || 
		document.body.scrollTop) - 
		document.documentElement.clientTop;
		}
	return cursor;
	}


Модератор:
Перенесено с форума PHP, Perl
...
Рейтинг: 0 / 0
03.11.2008, 13:34
    #35632225
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Если есть возможность поставить обработчик на каждый из дивов2 (ссылаясь на одну функцию), то там можно поставить
event.cancelBubble = true; //IE
event.stopPropagation(); //FF
В этом случае при наведении на них не сработает обработчик дива1.

Не очень понятен вопрос, так как фразы "чтобы onmouseover срабатывал" и "когда мышка покидает область" противоречат друг другу.
...
Рейтинг: 0 / 0
03.11.2008, 13:39
    #35632232
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
А, да, для кроссбраузерности лучше писать так:
Код: plaintext
1.
if (event.stopPropagation) event.stopPropagation();
else event.cancelBubble = true;
Судя по литературе работает везде.
...
Рейтинг: 0 / 0
03.11.2008, 14:11
    #35632273
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Прописал:
Код: plaintext
1.
2.
3.
4.
function cancel_mouse(){
	if (event.stopPropagation) event.stopPropagation();
	else event.cancelBubble = true;
	}
Затем на самих элемнтах:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<div id="big_div" class="hide">
  <div id="progress_load" class="hide">
    <img src="templates/loading.gif" width="76" height="8px" alt="Loading..."/>
  </div>
	
  <div id="progress_show" class="hide">	
    <div id="place_of_loading" onmouseover="anim_show_buttons()" onmouseout="anim_hide_buttons()"></div>

    <div class="starsfon">
			   ...
    </div>
/* элемнты каторые попадают поверх place_of_loading */
    <div onclick="prev_pic();" class="btnprev" id="toleft" onmouseout="cancel_mouse()" onmouseover="cancel_mouse()"> < </div>
    <div  onclick="hide();" id="toclose" class="btnclose" onmouseout="cancel_mouse()" onmouseover="cancel_mouse()"> X </div>
    <div onclick="next_pic();" class="btnnext" id="toright" onmouseout="cancel_mouse()" onmouseover="cancel_mouse()"> > </div>
	</div>		
/* все они закончились */
</div>
Всеравно не работает( Когда навожу на эти кнопки >, < и X - у меня срабатывает anim_hide_buttons()
...
Рейтинг: 0 / 0
03.11.2008, 14:32
    #35632303
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Ещё надо бы писать
Код: plaintext
1.
onmouseout="cancel_mouse(event)"
А в обработчике
Код: plaintext
1.
2.
3.
function cancel_mouse(ev){
            ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble=true;
}
В принципе, как у IDVsbruck , только с параметром (и покошернее).
А так, посути, не очень понял, чего нужно.
...
Рейтинг: 0 / 0
03.11.2008, 16:06
    #35632465
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Тоже самое ...
Не думал, что по поводу event'а надо так подробно разжевывать. Прдн.
...
Рейтинг: 0 / 0
03.11.2008, 19:29
    #35632719
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Есть галерея с мелкими картинкаи. КОгда на них нажимаешь то экран наполовину гаснет, грузитьс ябольшая версия картинки, и как она загрузилась показываеться пользвоателю. Слева на самом рисунке, справа на самом рисунке и в верхнем правом углу прямо на картинке расположены другие имаджики. Первые две это стрелочки перейти к следующей или к предыдушей картинке, а третья закрывает.

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

зы. Шас попробую таким способом...
...
Рейтинг: 0 / 0
03.11.2008, 19:37
    #35632726
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
ShSergeЕщё надо бы писать
Код: plaintext
1.
onmouseout="cancel_mouse(event)"
А в обработчике
Код: plaintext
1.
2.
3.
function cancel_mouse(ev){
            ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble=true;
}
В принципе, как у IDVsbruck , только с параметром (и покошернее).
А так, посути, не очень понял, чего нужно.Неа, не пашет( Всеравно
...
Рейтинг: 0 / 0
03.11.2008, 20:00
    #35632740
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Ага. Теперь понятно. Канселбаббл здесь больному не поможет. Вариантов миллион. Можно например заряжать таймер по онмоусеоут, а по приходе мыши на кнопочки, его гасить и т.д. Так же картинку можно по другому делать, т.е. формировать на сервере имажу с кнопочками и анализировать позицию мышекурсора. Но чтобы не мучаться и ничего не переделывать, попробуй с таймером, я где-то аналогичную штуку делал - работает.
...
Рейтинг: 0 / 0
03.11.2008, 22:52
    #35632855
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Попробовал на таймерах. Идея хорошая но в моем случае не прокатила(
зато заработала такая конструкция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function anim_hide_buttons(){
	var tl=document.getElementById("place_of_loading").offsetParent.offsetLeft;
	var tt=document.getElementById("place_of_loading").offsetParent.offsetTop;
	var tw=document.getElementById("place_of_loading").clientWidth;
	var th=document.getElementById("place_of_loading").clientHeight;
	var tm = mousePageXY();
	
	var t=(tl<tm.x)&&(tt<tm.y)&&(tl+tw>tm.x)&&(tt+th>tm.y);
	if(!t){
....
}
}
...
Рейтинг: 0 / 0
03.11.2008, 23:50
    #35632894
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
Не согласен, что баблинг не прокатит ... Просто важно сделать грамотный сценарий работы.
Просто на onmouseover и out бабблинг ставить не надо, а на onclick надо.
Не очень понимаю причин проблемы ...
...
Рейтинг: 0 / 0
04.11.2008, 07:40
    #35633011
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение, есть ли мышка на диве:
IDVsbruckНе согласен, что баблинг не прокатит ... Просто важно сделать грамотный сценарий работы.
Просто на onmouseover и out бабблинг ставить не надо, а на onclick надо.
Не очень понимаю причин проблемы ...
причина проблемы в том, что когда мыша оказывается на внутренних по отношению к контейнеру объектах, в контейнере срабатывает mouseout. Пример:
Код: plaintext
1.
2.
3.
4.
<div id="outerDiv" style="border:1px solid; padding:20px" onmouseout="var obj = event.srcElement || event.target; alert(obj.id);">
	qwertyuiop
	<div id="innerDiv" style="border:1px solid red; padding:20px"">inner div</div>
	asdfghjkl'
</div>
cancelBubble здесь не поможет, т.к. сначала срабатывает mouseout для внешнего дива, а только потом уже наступают события внутреннего. Об onclick'е речь вообще не идет.
Я через таймер делаю.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Определение, есть ли мышка на диве: / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]