Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   event offset client (https://javascript.ru/forum/events/28109-event-offset-client.html)

cyber 08.05.2012 00:21

event offset client
 
немогу понять в чем разница между offsetX ,clientX и pageX ,
подскажите пожалуста

Раед 08.05.2012 01:45

Цитата:

Сообщение от cyber
clientX и pageX

pageX учитывает прокрутку страницы, а clientX - нет.

cyber 08.05.2012 01:47

Цитата:

Сообщение от Раед (Сообщение 173222)
pageX учитывает прокрутку страницы, а clientX - нет.

а offset ?
он дает другие кординаты

Раед 08.05.2012 11:40

Цитата:

Сообщение от cyber
а offset

А он по-моему вообще не кроссбраузерный
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<script type="text/javascript">
window.onclick = function(e) {
 e = e || window.event;
 alert(e.offsetX);
}
</script>
</head><body>
Кликните здесь
В Firefox салертил undefined
</body></html>

cyber 08.05.2012 11:43

Цитата:

Сообщение от Раед (Сообщение 173237)
А он по-моему вообще не кроссбраузерный
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<script type="text/javascript">
window.onclick = function(e) {
 e = e || window.event;
 alert(e.offsetX);
}
</script>
</head><body>
Кликните здесь
В Firefox салертил undefined
</body></html>

понятно спс.
еще маленький вопрос :
что значит запись e = e || window.event;
давно хотел понять типо заносит в е или е или window.event но при каком условии?

Раед 08.05.2012 11:51

cyber,
IE<9 не передаёт событие в обработчик. У него оно хранится в window.event
Остальные браузеры передают объект-событие в функцию 1-м аргументом.

Оператор || возвращает 1-ое значение, которое приводится к true (ну или последнее, которое к false). Следовательно в нормальных браузерах будет что-то вроде e = e, а в IE e = window.event.

cyber 08.05.2012 12:21

я так понимаю это e = (e === undefind) ? window.event : e; и это e = e || window.event; работает одинаково?
если да то я правильно писал=)

Раед 08.05.2012 12:34

Цитата:

Сообщение от cyber
я так понимаю это e = (e === undefind) ? window.event : e; и это e = e || window.event; работает одинаково?

Да

cyber 08.05.2012 12:34

Цитата:

Сообщение от Раед (Сообщение 173240)
cyber,
IE<9 не передаёт событие в обработчик. У него оно хранится в window.event
Остальные браузеры передают объект-событие в функцию 1-м аргументом.

я это знал.
но самое интересное , что код ниже работает в ие9
document.getElementById("link").onclick=function(e) 
{
alert(e);
	}

но поидее он должен работать так
document.getElementById("link").onclick=function(e) 
{
e = (e === 'undefind') ? window.event : e;
alert(e);
	}

Раед 08.05.2012 12:36

Цитата:

Сообщение от cyber
но самое интересное , что код ниже работает в ие9

Ну на к 9-ой версии разработчики ИЕ одумались
Так что IE9 в принципе уже нормальный


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