Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблемма с JS и onmousemove в ИЕ (https://javascript.ru/forum/events/4906-problemma-s-js-i-onmousemove-v-ie.html)

Dimamerk 28.08.2009 20:33

Проблемма с JS и onmousemove в ИЕ
 
Здравствуйте.

Есть такой кусок кода:
isDOM=document.getElementById; //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
isOpera=isOpera5=window.opera && isDOM; //Opera 5+
isOpera6=isOpera && window.print; //Opera 6+
isOpera7=isOpera && document.readyState; //Opera 7+
isMSIE=document.all && document.all.item && !isOpera; //Microsoft Internet Explorer 4+
isMSIE5=isDOM && isMSIE; //MSIE 5+
isNetscape4=document.layers; //Netscape 4.*
isMozilla=isDOM && navigator.appName=="Netscape"; //Mozilla или Netscape 6.*

var xPos = 0,yPos = 0;

if(isNetscape4) document.captureEvents(Event.MOUSEMOVE);
if(isMSIE || isOpera7){
  document.onmousemove=function(){
    xPos=event.clientX+document.body.scrollLeft; 
    yPos=event.clientY+document.body.scrollTop; 
    return true;
  }
}else if(isOpera){
  document.onmousemove=function(){
    xPos=event.clientX;
    yPos=event.clientY;
    return true;
  }
}else if(isNetscape4 || isMozilla){
  document.onmousemove=function(e){
    xPos = e.pageX;
    yPos = e.pageY;
    return true;
  }
}


что он делает думаю понятно, но есть с ним одна проблемма ИЕ 6,7,8 при первой загрузке страницы (где то в 70% случаев) ругается "Требуется объект" на строку xPos=event.clientX+document.body.scrollLeft; при обновлении, повторной загрузке ошибка не выскакивает. Ни опера, ни мозила ошибок не выдают.

Уже голову сломал что делать, на функционал это не влияет, событие обрабатывается нормально, но желтая иконка напрягает.

Может кто подскажет как это вылечить? Блокировать onerror не хочется.

Octane 28.08.2009 21:04

Ваш код из далекого прошлого.

var ie //@cc_on = true;
var xPos = 0, yPos = 0;
var element = document.documentElement || document.body;

function calc(side) {
	return (element["scroll" + side] || 0) - (element["client" + side] || 0);
}

function getPageX(event) {
	return event.clientX + calc('Left');
}

function getPageY(event) {
	return event.clientY + calc('Top');
}

document.onmousemove = function(event) {
	var event = event || window.event;
	if(ie) {
		xPos = getPageX(event);
		yPos = getPageY(event);
	} else {
		xPos = event.pageX;
		yPos = event.pageY;
	}
};

Riim 29.08.2009 00:42

Цитата:

Сообщение от Octane
document.documentElement || document.body

Записи:
var elem = document.documentElement || document.body;
var r = elem.scrollLeft;

и
var r = document.documentElement.scrollLeft || document.body.scrollLeft;

не равноценны.


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