странно работают условия...

 
0
 
JavaScript
ava
Step | 27.10.2004, 16:03
проблемма такая слой закрываеть четко только если мышь уезжает вниз или вправо
если вверх или влево... то работает через раз
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Меню</title>
<script language="JavaScript">
<!--
function FP_callJS(visible) {//v1.0

var obj=document.getElementById("layer1");
if (visible) obj.style.visibility="visible";
else {
var x=parseInt(obj.style.left);
var y=parseInt(obj.style.top);
var dx=parseInt(obj.style.width);
var dy=parseInt(obj.style.height);
var xc=window.event.x;
var yc=window.event.y;
if ((xc<x)|(xc>x+dx)|(yc<y)|(yc>y+dy)) obj.style.visibility="hidden";
}
}
// -->
</script>
</head>

<body>
<p onmouseover="FP_callJS(true)" on><span lang="ru">Меню</span></p>
<div style="border-style:solid; padding:10; position: absolute; width: 100; height: 146px; z-index: 1; left: 140px; top: 83px; background-color: #3333FF; visibility:hidden; border-width:1px" id="layer1" onmouseout="FP_callJS(false)">



</div>

<p>reuertujrtj</p>
</body>

</html>
Comments (13)
ava
Step | 27.10.2004, 15:19 #
как оказалось условия работают нормально, но объяните мне почему при покидании области слоя в правую сторону генериться сообщение mouseout и при этом координаты курсура мышки лежат внутри области...


такого глюка я не ожидал
ava
Sardar | 27.10.2004, 20:56 #
Step расслабся, это не C++ smile
Событие происходит на DIV'е, потому координаты еще в слое, но не всегда так, зависти от конкретной реализации браузера. Почему? Потому что ты первый кто решил сам проверять выход мыши за границы :)

Преписываем код:
HTML
<p onmouseover="document.getElementById('layer1').style.visibility='visible';" style="background-color: #8d9bf5;"><span lang="ru">Ìåíþ</span>
<div style="border-style:solid; padding:10; position: absolute; width: 100; height: 146px; z-index: 1; left: 140px; top: 83px; background-color: #3333FF; visibility:hidden; border-width:1px" id="layer1" onmouseout="this.style.visibility='hidden'"></div>
</p>
<p>reuertujrtj</p>


Да это немного не то. Теперь задумайся, зачем тебе проверять границы если ты получил событие onmouseout? Мышь вроде как уже вышла ;-)
То же самое относится и к другим событиям.
ava
Step | 28.10.2004, 11:09 #
Цитата (Sardar @ 27.10.2004, 20:56)


Да это немного не то. Теперь задумайся, зачем тебе проверять границы если ты получил событие onmouseout? Мышь вроде как уже вышла

То же самое относится и к другим событиям.


Правильно мыслишь, зачем....

вот затем что в слое будет еще размещены объекты и при переходи на них будет генриться выход со слоя(это так), выход сгенерился а на самом деле курсор над слоем...


ava
Alx | 28.10.2004, 21:17 #
Цитата
это так

ничего подобного. достаточно сделать так:


<p onmouseover="document.getElementById('layer1').style.visibility='visible';" style="background-color: #8d9bf5;"><span lang="ru">меню</span>
<div style="border-style:solid; padding:10; position: absolute; width: 100; height: 146px; z-index: 1; left: 140px; top: 83px; background-color: #3333FF; visibility:hidden; border-width:1px" id="layer1" onmouseout="this.style.visibility='hidden'" onmouseover="this.style.visibility='visible';" ></div>
<div onmouseover="document.getElementById('layer1').style.visibility='visible';" style="width:50;height:50;background:red;position:relative;left: 140px; top: 83px;z-index: 2;">
</p>
<p>reuertujrtj</p>
ava
Sardar | 29.10.2004, 01:09 #
Елки что то не то... никогда с таким раньше не встречался... smile Действительно можно проверять координаты, также можно узнать куда нарпавляемся(toElement/relatedTarget), если в наше же содержимое, то ничего не делаем.

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

Как вариант можно ставить зкарытие меню на таймер(так еще и удобней и привычней для юзера), если мы пересекаем содержимое, то таймер обнуляем. Так по моему делалось раньше...
ava
Step | 29.10.2004, 12:01 #
ALEXANDRO
Цитата (ALEXANDRO @ 28.10.2004, 21:17)


ничего подобного. достаточно сделать так:


т.е. вы признаете что это так и даете код как поправить.... пожалуйста объясните данный код...


и вопрос состоит в том что я возмущен такими вот вещами что онмоузиоут генериться с координатами внутри объекта... такого я еще не в одном языке программирования не встречал
ava
GoodBoy | 29.10.2004, 12:10 #
Цитата (Step @ 29.10.2004, 13:01)
я возмущен такими вот вещами что онмоузиоут генериться с координатами внутри объекта...

Нет, это всё логично!!! Когда ты переходишь к пространству потомка, ты автоматически покидаешь пространство предка и тебе у предка генерится событие выхода!!!
ava
Step | 29.10.2004, 12:15 #
GoodBoy, твои слова говорят о том что сообщение генериться на границе, что не являеться фактом выхода... и не являеться логичным
ava
GoodBoy | 29.10.2004, 12:20 #
Step
Ну как же!!! Событие генерится для конкретного объекта и как только курсор мыши выходит с того пространства, которое занимает объект этот объект получает событие onMouseOut. Даже если курсор мыши перемещается в пространство потомка данного объекта.
ava
Step | 29.10.2004, 12:24 #
GoodBoy, попробуй, только мышку, двигай быстро... и увидишь... что генриться реальные координаты... и вопрос почему это происходит только при движении вверх и влево smile
ava
sergejzr | 29.10.2004, 13:10 #
Цитата (Step @ 29.10.2004, 11:01)


онмоузиоут генериться с координатами внутри объекта... такого я еще не в одном языке программирования не встречал



В Яве так smile Это очень удобно иногда smile
ava
Step | 29.10.2004, 13:18 #
Цитата (sergej @ 29.10.2004, 13:10)


В Яве так Это очень удобно иногда



sergej.z, скажи в каких случаях это удобно

и почему такая неоднозначность
влево и вверх одно, вправо и вниз другое
ava
sergejzr | 29.10.2004, 13:23 #
Цитата (Step @ 29.10.2004, 12:18)


sergej.z, скажи в каких случаях это удобно


Когда я сам делаю прорисовку обьектов например. Я могу точно узнать, тянет ли кто либо за мой нарисованный обьект, или мышь уже давно за экраном smile В яваскрипте не знаю smile пока не нужно было smile
Насчёт неоднозначности. Не могу к сож. пока сказать :(
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Sardar   Step   GoodBoy   Alx   sergejzr
advanced
Submit