Проблемы с MouseMove в FireFox
Если повесить на элемент обработчики событий MouseMove и MouseOut, в FireFox наблюдаеться странная ситуация. При срабатывании MouseMove FireFox сам начинает генерировать событие MouseOut. Опера и ИЕ вызывают MouseOut только при отводе курсора с элемента, как и должно быть. Хотелось бы узнать как побороть эту штуку в FireFox.
|
телепаты в отпуске
код в студию вы делаете что-то неправильно, потому что такого быть не может, чтобы браузер без причины генерировал события |
Цитата:
function defPosition(event) { var x = y = 0; if (document.attachEvent != null) { // Internet Explorer & Opera x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); } else if (!document.attachEvent && document.addEventListener) { // Gecko x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } else { // Do nothing } return {x:x, y:y}; } function Init() { var img=document.getElementsByTagName('span'); for(var i=0;i<img.length-1;i++) { if(img[i].getAttribute("show_big_img")=="On") { img[i].onmousemove=function(obj) { Show_img_popap(obj,this) } img[i].onmouseout=function() { Hide_img_popap(this); } } } } function Show_img_popap(evt,obj) { if(document.getElementById("imaga_"+obj.id)==null) { div_img=document.createElement('DIV'); div_img.style.display='block'; div_img.style.position='absolute'; div_img.style.left=defPosition(evt).x; div_img.style.top=defPosition(evt).y; div_img.style.padding="20px"; div_img.id="imaga_"+obj.id; img_obj=document.createElement('img'); img_obj.src=obj.getAttribute("path"); img_obj.style.display='block'; document.body.appendChild(div_img); div_img.appendChild(img_obj); } else { obj=document.getElementById("imaga_"+obj.id); obj.style.display="block"; obj.style.left=defPosition(evt).x; obj.style.top=defPosition(evt).y; } } function Hide_img_popap(obj) { obj=document.getElementById("imaga_"+obj.id); obj.style.display="none"; } window.onload = function () { Init(); } <h2><span id="img1" show_big_img="On" path="/user_files/2930image006.gif">Текст</span></h2> |
а)у вас ошибка в цикле.ну, это я думаю вы порсто опечатались на форум перенося, иначе бы нигде у вас вообще не работало
for(var i=0;i<img.length-1;i++)//неверно for(var i=0;i<img.length;i++) б)в данном случае у вас просто при проявлении дива с риснуком, крусор мыши оказывается как раз над ним. связано это со стилями, и их разной отработкой в разных бразуерах самая простейшая заплатка такая: obj.style.left=defPosition(evt).x; obj.style.top=defPosition(evt).y; меняем на: obj.style.left=defPosition(evt).x+1; obj.style.top=defPosition(evt).y+1; |
Ага, пасиб большое. Все заработало.
Еще один вопрос. Каким образом можно сделать так, что бы до того пока картинка полностью не загрузиться див не появлялся. Интересует в первую очередь самый правильный способ проверки загрузилась ли полностью картинка или нет. |
у элемента image есть событие onload
только назначать его надо до назначения src картинки |
Часовой пояс GMT +3, время: 12:40. |