Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2009, 19:33
Новичок на форуме
Отправить личное сообщение для Dimamerk Посмотреть профиль Найти все сообщения от Dimamerk
 
Регистрация: 28.08.2009
Сообщений: 1

Проблемма с 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 не хочется.
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2009, 20:04
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

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

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;
	}
};
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2009, 23:42
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Octane
document.documentElement || document.body
Записи:
var elem = document.documentElement || document.body;
var r = elem.scrollLeft;

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

не равноценны.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 22:36
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 10:35
"Классический" ООП в JavaScript Андрей Параничев Общие вопросы Javascript 67 25.03.2009 17:33
Загрузка дополнительного js кода с сервера Anonymous2008 Общие вопросы Javascript 5 20.11.2008 11:33
подключение стороннего js скрипта friend Общие вопросы Javascript 2 24.05.2008 18:51