В чем разница между screenX
/Y
, clientX
/Y
и pageX
/Y
?
Также для iPad Safari, являются ли вычисления похожими на настольные - или есть какая-то разница из-за видового экрана?
Было бы здорово, если бы вы могли указать мне пример.
В чем разница между screenX
/Y
, clientX
/Y
и pageX
/Y
?
Также для iPad Safari, являются ли вычисления похожими на настольные - или есть какая-то разница из-за видового экрана?
Было бы здорово, если бы вы могли указать мне пример.
В JavaScript:
pageX
, pageY
, screenX
, screenY
, clientX
и clientY
возвращают число, которое указывает количество физических "пикселей CSS", из которых точка находится в контрольной точке. Точка события - это место, где пользователь щелкнул, контрольная точка - это точка в левом верхнем углу. Эти свойства возвращают горизонтальное и вертикальное расстояние от этой контрольной точки.
clientX
и clientY
:
Относительно верхнего левого края полностью отображаемой области содержимого в браузере. Эта контрольная точка находится под строкой URL и кнопкой возврата в верхнем левом углу. Эта точка может находиться в любом месте окна браузера и может фактически изменить местоположение, если есть встроенные прокручиваемые страницы, встроенные в страницы, и пользователь перемещает полосу прокрутки.
screenX
и screenY
:
По отношению к верхнему левому углу физического экрана/монитора эта контрольная точка перемещается только при увеличении или уменьшении количества мониторов или разрешения монитора.
pageX
и pageY
:
Относительно верхнего левого края области содержимого (окна просмотра) окна браузера. Эта точка не перемещается, даже если пользователь перемещает полосу прокрутки из браузера.
Для визуального отображения, какие браузеры поддерживают какие свойства:
http://www.quirksmode.org/dom/w3c_cssom.html#t03
У w3schools есть онлайн-переводчик и редактор Javascript, чтобы вы могли видеть, что каждый из них делает
http://www.w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
<!DOCTYPE html>
<html>
<head>
<script>
function show_coords(event)
{
var x=event.clientX;
var y=event.clientY;
alert("X coords: " + x + ", Y coords: " + y);
}
</script>
</head>
<body>
<p onmousedown="show_coords(event)">Click this paragraph,
and an alert box will alert the x and y coordinates
of the mouse pointer.</p>
</body>
</html>
Вот изображение, объясняющее разницу между pageY
и clientY
.
То же самое для pageX
и clientX
, соответственно.
pageX/Y
координаты относятся к верхнему левому углу всей отображаемой страницы (включая части, скрытые при прокрутке),
а координаты clientX/Y
относятся к верхнему левому углу видимой части страницы, "видны" через окно браузера.
Вам, вероятно, никогда не понадобится screenX/Y
<html>
в пикселях CSS.viewport
в пикселях CSS.screen
в пикселях устройства.Относительно вашего последнего вопроса, если вычисления аналогичны для настольных и мобильных браузеров... Для лучшего понимания - для мобильных браузеров - нам нужно выделить две новые концепции: макет видового экрана и визуальный просмотр. Визуальное окно просмотра является частью страницы, отображаемой в настоящее время на экране. Окно просмотра макета является синонимом полной страницы, отображаемой в браузере рабочего стола (со всеми элементами, которые не отображаются в текущем окне просмотра).
В мобильных браузерах pageX
и pageY
по-прежнему относятся к странице в пикселях CSS, поэтому вы можете получить координаты мыши относительно страницы документа. С другой стороны, clientX
и clientY
определяют координаты мыши относительно визуального просмотра.
Здесь есть другой поток stackoverflow, касающийся различий между визуальным видовым окном и видовым окном макета: Разница между визуальным видовым окном и макетом просмотра?
Еще один хороший ресурс: http://www.quirksmode.org/mobile/viewports2.html
Что помогло мне, так это добавить событие прямо на эту страницу и щелкнуть для себя! Откройте консоль в инструментах разработчика /Firebug и т.д. И вставьте это:
document.addEventListener('click', function(e) {
console.log(
'page: ' + e.pageX + ',' + e.pageY,
'client: ' + e.clientX + ',' + e.clientY,
'screen: ' + e.screenX + ',' + e.screenY)
}, false);
Click anywhere
Разница между ними будет во многом зависеть от того, к какому браузеру вы в настоящее время обращаетесь. Каждый из них реализует эти свойства по-разному или совсем не работает. Quirksmode имеет отличную документацию относительно различий браузера в отношении стандартов W3C, таких как DOM и JavaScript Events.