Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   onmousemove не отлавливается (https://javascript.ru/forum/misc/29940-onmousemove-ne-otlavlivaetsya.html)

haxoid 18.07.2012 10:20

onmousemove не отлавливается
 
есть скрипт:

<script type="text/javascript"> 
  function moveTip(e) 
	{
		//alert('a');
	if(!e) e=window.event;
	//else
	/*else
	{
		var an = navigator.appName;
		var av = navigator.appVersion;
		var acn = navigator.appCodeName;
		var ua = navigator.userAgent;

		alert(an+av+acn+ua);

	}*/
	//alert(e.target);
  floatTipStyle = document.getElementById("floatTip").style;
  
  w = 250; // Ширина слоя
  // Для браузера IE
  var IE='\v'=='v';
  if (document.all) { 
    x = event.x + document.body.scrollLeft; 
    y = event.y + document.body.scrollTop; 
  // Для остальных браузеров
  } else { 
  
    x = e.pageX; 
    y = e.pageY; 
  }
  
  if ((x + w + 10) < document.body.clientWidth) { 
    floatTipStyle.left = x + 'px';
    } else
	{ 
    floatTipStyle.left = x - w + 'px';
  }
  
  floatTipStyle.top = y + 20 + 'px';
}
function toolTip(msg) {

alert('a');
  floatTipStyle = document.getElementById("floatTip").style;
  if (msg) {

    document.getElementById("floatTip").innerHTML = msg;
    floatTipStyle.display = "block"; 
  } else { 
    floatTipStyle.display = "none"; 
  } 
}
</script>


вот использование:

<img src="images/odel.jpg" alt="Фотография" width="300" height="450" 
   onmouseover="toolTip('текст')" onmouseout="toolTip()" onmousemove = "moveTip(e) " />
   <div id="floatTip"></div>


и идентификатор:

#floatTip 
	{
		position: absolute; width: 250px; display: none; 
		border: 1px solid #000; padding: 5px;
		font-family: sans-serif; font-size: 9pt;
		color: #931; background: red;
		opacity: 0.85;
		left:0;
	}


Задача: должно реализовываться движение за курсором мыши (при навидении на картинку) блока div, описанного #floatTip тут. Как только курсор вышел за границу, блок около курсора должен исчезнуть. Скрипт в принципе рабочий, проверял просто когда в документе 1 div. Но в моей ситаации наблюдается большая вложенность дивов (контент и тд). Вот почему то при этой вложенности onmouseover, onmouseout отлавилаются, но выводится див блок только под изображение, а мне надо чтоб за курсором выводился блок без остановки, а mousemove не ловится.
Подскажите че делать?

заранее спасибо.

Deff 18.07.2012 12:29

haxoid,
Попробуйте добавить z-index
#floatTip 
	{
		position: absolute; width: 250px; display: none; 
		border: 1px solid #000; padding: 5px;
		font-family: sans-serif; font-size: 9pt;
		color: #931; background: red;
		opacity: 0.85;
		z-index:2000;
		left:0;
	}

Deff 18.07.2012 12:36

И второе - Нет такого объекта document.getElementById("floatTip").style
В Переменную вдалбливаете floatTipStyle = document.getElementById("floatTip")

А для задания свойств floatTipStyle.style.left = ...
floatTipStyle.style.top = ...

haxoid 18.07.2012 13:39

к сожалению никаких изменений. Есть еще варианты?

vadim5june 18.07.2012 13:51

Цитата:

Сообщение от haxoid (Сообщение 189691)
к сожалению никаких изменений. Есть еще варианты?

можно mousemove на body повесить тогда ловиться будет хотя придется по другому считать

haxoid 18.07.2012 14:16

повесил на боди - ноль реакции. Из за чего такое может быть?

vadim5june 18.07.2012 14:28

Цитата:

Сообщение от haxoid (Сообщение 189693)
повесил на боди - ноль реакции. Из за чего такое может быть?

а остальные события работают?
Напишите в стилях
body {height:100%}
для ие надо e.x а не event.x
в таких случаях всегда проблема что курсор то на картинке будет то на див попадет-поэтому див надо ниже курсора пикселов на 20

Раед 18.07.2012 14:51

Цитата:

Сообщение от Deff
И второе - Нет такого объекта document.getElementById("floatTip").style
В Переменную вдалбливаете floatTipStyle = document.getElementById("floatTip")

А для задания свойств floatTipStyle.style.left = ...
floatTipStyle.style.top = ...

Deff,
Сущий бред

haxoid 18.07.2012 14:51

остальные события работают в том то и дело! даже для того же дива, события onmouseover, onmouseout работают даже из боди. Движение курсора просто не отлавливается. Алерты не выводятся. Магия.

vadim5june 18.07.2012 14:59

Цитата:

Сообщение от haxoid (Сообщение 189706)
остальные события работают в том то и дело! даже для того же дива, события onmouseover, onmouseout работают даже из боди. Движение курсора просто не отлавливается. Алерты не выводятся. Магия.

что то с самой функцией напишите
function moveTip(e)
{alert(0)}

<body onmousemove=moveTip(event)>

haxoid 18.07.2012 15:07

о стал алерт выводится, но блок див все так же выводится не в положении курсора и не двигается за ним а ниже картинки блок выводится

vadim5june 18.07.2012 15:10

Цитата:

Сообщение от haxoid (Сообщение 189712)
о стал алерт выводится, но блок див все так же выводится не в положении курсора и не двигается за ним а ниже картинки блок выводится

такое может быть если у него parentNode не body
то есть Вы его куда то внутрь засунули
html код внимательно посмотрите
этот див лучше скриптом делать
var d=document.createElement('div');
d.id='floatTip';
document.body.appendChild(d);

haxoid 18.07.2012 15:48

ну да, у меня в скрипте document.onmousemove = moveTip;
это значит что область видимости его - весь html? но почему то он до вложенного дива добраться не может, хотя onmouseout, onmouseover находит

vadim5june 18.07.2012 15:55

Цитата:

Сообщение от haxoid (Сообщение 189720)
ну да, у меня в скрипте document.onmousemove = moveTip;
это значит что область видимости его - весь html? но почему то он до вложенного дива добраться не может, хотя onmouseout, onmouseover находит

так у Вас див с ид=floatTip
вложенный что ли?
он не должен быть вложенным

haxoid 18.07.2012 15:59

был вложен. Теперь не вложен. Перенес его в боди самым первым
<body >
	   <div id="floatTip" ></div>

результата нет-все равно на движение нет реакции, только на onmouseout, onmouseover и выводится блок теперь в хидере.

vadim5june 18.07.2012 16:07

я вот так обычно делаю
<!DOCTYPE html>

<html>
<head>
<style>
  #floatTip 
	{
position: absolute; width: 250px; 
display: none; border: 1px solid #000; padding: 5px;
font-family: sans-serif; font-size:9pt;color: #931; 
background: red;opacity: 0.85;
		z-index:2000;left:0;
	}</style>
<script>
 var pr=0;
function f(){pr=1};
function f1(){pr=0;var f=document.getElementById('floatTip');f.style.display='none';};
function f3(e){if(pr!=1)return;
var f=document.getElementById('floatTip');f.style.display='block';
f.style.top=(e.pageY+10)+'px';
f.style.left=(e.pageX-125)+'px';
};
</script>
<body onmousemove=f3(event)>
<div id='floatTip'
></div><img width=200 onmouseover=f(event) onmouseout=f1(event) src='http://all-html5.narod.ru/2/1.jpg'>

oneguy 18.07.2012 17:02

Цитата:

Сообщение от haxoid
<img src="images/odel.jpg" alt="Фотография" width="300" height="450"
onmouseover="toolTip('текст')" onmouseout="toolTip()" onmousemove = "moveTip(e) " />

Ошибка здесь: что это за переменная e? Вы, наверное, хотели moveTip(event)

haxoid 20.07.2012 18:02

а разве есть разница в именах переменных? или должно на вход именно имя event подаваться?

lord2kim 20.07.2012 18:47

Цитата:

Сообщение от haxoid (Сообщение 190322)
а разве есть разница в именах переменных? или должно на вход именно имя event подаваться?

в данном случае вы просто передаете какую-то переменную e, а должны передавать объект события event

bes 20.07.2012 19:42

Цитата:

Сообщение от lord2kim
в данном случае вы просто передаете какую-то переменную e, а должны передавать объект события event

Да, только не зная этого, до этого трудно догадаться после использования конструкций типа = function (e) {e = e || event}, где event - для IE, а e как первый переданный аргумент для остальных браузеров :)


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