Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Получение кординат - кроссбраузерность (https://javascript.ru/forum/css-html/29007-poluchenie-kordinat-krossbrauzernost.html)

Igoreshka 10.06.2012 23:48

Получение кординат - кроссбраузерность
 
function GetMouseX(e) {
if (e.pageX) return e.pageX;
else if (e.clientX)
   return e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
else return null;
}


Данный код не работает в IE 6, хотя как раз проверка на IE осуществляется во второй строчке... В чем может быть проблема?

Спасибо

devote 10.06.2012 23:54

function GetMouseX(e)
	// получить объект событие для IE
	e = e || window.event;

	// добавить pageX для IE
	if ( e.pageX == null && e.clientX != null ) {
		var html = document.documentElement;
		var body = document.body;
		e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
	}

	return e.pageX;
}

function GetMouseY(e)
	// получить объект событие для IE
	e = e || window.event;

	// добавить pageY для IE
	if ( e.pageY == null && e.clientY != null ) {
		var html = document.documentElement;
		var body = document.body;
		e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
	}

	return e.pageY;
}

Igoreshka 11.06.2012 00:07

Спасибо, теперь все работает, но хотелось бы понять почему ваш код работает, а мой нет...

Кстати свой код я пытался и так записать:
function GetMouseX(e) {
if (window.Event) { document.captureEvents(Event.MOUSEMOVE); return e.pageX;}
else if (e.clientX)
   return e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
else return null;
}

все равно не работало. Ведь фактически у меня код тоже самое что и у вас, только пропущен нюанс, а какой?

devote 11.06.2012 00:16

Цитата:

Сообщение от Igoreshka
все равно не работало. Ведь фактически у меня код тоже самое что и у вас, только пропущен нюанс, а какой?

нет вы не правы, ваш код ничем не схож с моим, даже рядом не стоит. А вся ваша ошибка лишь в том, что вы пытаетесь использовать не существующий объект.
function GetMouseX(e) {
if (e.pageX) return e.pageX;
else if (e.clientX) // вот здесь у вас возникает ошибка, так как объект e равен undefined
   return e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
else return null;
}
а нужно делать примерно так:
function GetMouseX(e) {
e = e || window.event;
if (e.pageX) return e.pageX;
else if (e.clientX)
   return e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
else return null;
}

Igoreshka 11.06.2012 19:15

Спасибо, карму я вам добавил за помощь


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