Проблемма с 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 не хочется. |
Ваш код из далекого прошлого.
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; } }; |
Цитата:
var elem = document.documentElement || document.body; var r = elem.scrollLeft; и var r = document.documentElement.scrollLeft || document.body.scrollLeft; не равноценны. |
Часовой пояс GMT +3, время: 06:51. |