711
2124
Получить координаты курсора на экране
Предлагаем Вам простой JavaScript код, отображающий текущие координаты курсора на экране. Координаты берутся относительно
окна странички и не превышают разрешение экрана.
Данный скрипт позволяет выводить координаты курсора как в statusbar-е, так и в заданном месте странички.
Текущие координаты курсора:
Для получения текущих координат курсора на экране сайта вставьте на свою страничку следующий скрипт:
JavaScript код:
<script type="text/javascript">
function init() {
if (document.layers) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = mousemove;
}
function mousemove(event) {
var mouse_x = mouse_y = 0;
if (document.attachEvent != null) {
mouse_x = window.event.clientX;
mouse_y = window.event.clientY;
} else if (!document.attachEvent && document.addEventListener) {
mouse_x = event.clientX;
mouse_y = event.clientY;
}
status = "x = " + mouse_x + ", y = " + mouse_y;
document.getElementById('xy').innerHTML = "x = " + mouse_x + ", y = " + mouse_y;
}
init()
</script>
Далее, в том месте странички, где необходимо получить координаты курсора (если необходимо), вставляем
элемент <span id=»xy»></span>.
Если Вы все правильно сделали, то при перемещении курсора мыши по экрану браузера внутри элемента
<span id=»xy»></span> и в statusbar-е должны отображаться текущие координаты курсора.
Дата создания: 15:35:47 24.07.2011 г.
Дата обновления: 22:36:47 08.03.2012 г.
Посещений: 152632 раз(а).
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
- Информация о материале
- Категория: JavaScript
-
Опубликовано: 12 января 2011
-
Просмотров: 13056
Пишу эту заметку скорее для себя, чтобы в другой раз не гуглить Координаты элемента на странице. Довольно сложная и часто встречающаяся задача — кроссбраузерно, точно определить в какой именно позиции находится DOM элемент. У элементов есть свойства, которые возвращают отступы, но те, кто хоть раз пытался написать код для нескольких браузеров, знает, что они совершенно не работают. Тонкости типа прокрученной страницы или отступов других элементов находящихся выше, у меня отбивают желание самому искать решение проблемы. Поэтому в результате небольших поисков был найден этот скрипт. О том, как он работает можете почитать тут на сайте автора. Нам же важен конечный результат
Вот сам скрипт
function getOffset(elem) { if (elem.getBoundingClientRect) { // "правильный" вариант return getOffsetRect(elem) } else { // пусть работает хоть как-то return getOffsetSum(elem) } } function getOffsetSum(elem) { var top=0, left=0 while(elem) { top = top + parseInt(elem.offsetTop) left = left + parseInt(elem.offsetLeft) elem = elem.offsetParent } return {top: top, left: left} } function getOffsetRect(elem) { // (1) var box = elem.getBoundingClientRect() // (2) var body = document.body var docElem = document.documentElement // (3) var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft // (4) var clientTop = docElem.clientTop || body.clientTop || 0 var clientLeft = docElem.clientLeft || body.clientLeft || 0 // (5) var top = box.top + scrollTop - clientTop var left = box.left + scrollLeft - clientLeft return { top: Math.round(top), left: Math.round(left) } }
Пользоваться им просто
var elm = document.getElementById('testid'); var coords = getOffset(elm); alert('left='+coords.left+', top='+coords.top);
И в следующий раз не надо гуглить, просто заходим сюда и копипастим. Еще один совет по поводу браузера Mozilla Firefox. Его абсолютные координаты должны быть в пикселах, т.е. для этого браузера style=»left:100″ не равно style=»left:100px». Оно наверно и верно, но совершенно не очевидно. Сам не мало времени потратил на эту ошибку.
Да, и у JQuery есть метод offset. Если вы пользуетесь этой библиотекой, то можете смело воспользоваться ею. Автор данного выше скрипта утверждает, что этот метод реализован сходным образом.
Оставлять комментарии могут только зарегистрированные пользователи
Как узнать координаты курсора
Чтобы запрограммировать какие-то действия в ответ на перемещение курсора в окне браузера бывает необходимо определить его координаты. Это может сделать скрипт, который имеет возможность отслеживать события, происходящие в браузере. Такую возможность имеет выполняемый на стороне клиента JavaScript-сценарий. Ниже описан один из вариантов получения координат курсора с использованием возможностей этого языка.
Инструкция
Используйте свойства объекта event для получения текущих координат курсора. Этот объект имеет целый набор свойств, которые имеют отношение к определению координат курсора мыши. Свойство LayerX содержит измеренное в пискселах расстояние от левого края текущего слоя, а LayerY — аналогичное расстояние от его верхнего края. У этих двух свойств есть синонимы — вместо event.LayerX можно писать event.x, а вместо event.LayerY — event.y. Свойства pageX и pageY содержат горизонтальную и вертикальную координаты курсора относительно верхнего левого края окна браузера, а в свойства screenX и screenY помещаются аналогичные значения относительно экрана монитора.
Добавляйте в код проверку типа браузера и используйте свойства clientX и clientY в дополнение к приведенным выше свойствам объекта event. Это необходимо из-за того, что Microsoft в свой браузер Internet Explorer закладывает отличное от стандартных определений обозначение свойств. Совместить оба подхода к определению координат можно, например, так:
if(evevnt.pageX || evevnt.pageY) {
coordinateX = evevnt.pageX;
coordinateY = evevnt.pageY;
}
else if(evevnt.clientX || evevnt.clientY) {
coordinateX = evevnt.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) — document.documentElement.clientLeft;
coordinateY = evevnt.clientY + (document.documentElement.scrollTop || document.body.scrollTop) — document.documentElement.clientTop;
}
Поместите код определения координат в пользовательскую функцию. Например:
function GetMouse(evevnt) {
var coordinateX = 0, coordinateY = 0;
if (!evevnt) evevnt = window.event;
if(evevnt.pageX || evevnt.pageY) {
coordinateX = evevnt.pageX;
coordinateY = evevnt.pageY;
}
else if(evevnt.clientX || evevnt.clientY) {
coordinateX = evevnt.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) — document.documentElement.clientLeft;
coordinateY = evevnt.clientY + (document.documentElement.scrollTop || document.body.scrollTop) — document.documentElement.clientTop;
}
return {«coordX»:coordinateX, «coordY»:coordinateY};
}
Эта функция возвращает массив из двух именованных элементов, первый из которых (с ключом coordX) содержит координату по оси X, а второй (coordY) — по оси Y.
Вызывайте эту функцию по какому либо событию — например, по событию перемещения мыши (onmousemove) в контексте документа. Приведенный ниже образец использует функцию для вывода координат мыши в строку состояния:
document.onmousemove = function(evevnt){var CurCoord = GetMouse(evevnt); window.status = «коорд X:»+CurCoord.coordX+»px, коорд Y:»+CurCoord.coordY+»px»;};
Видео по теме
Войти на сайт
или
Забыли пароль?
Еще не зарегистрированы?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
02.04.2015
Определение координат курсора мыши
Возможности jQuery практически безграничны, главное преимущество — интерактивность. Благодаря jQuery можно создавать очень интересные проекты: будь то разработка сайта коттеджного посёлка или создание лендинг пейдж.
Очень часто нужно знать координаты курсора мыши, чтобы внедрить интерактив с пользователем. Сделать это очень просто, создав функцию, которая будет вызываться при событии mousemove и через event.pageX и event.pageY можно получить координаты курсора.
Помимо этого есть возможность определять координаты относительно другого объекта на сайте. Для этого нужно знать координаты самого объекта и инициализировать функцию определения координат при наведении на нужный объект.
- HTML
- CSS
- JS
- SQL
- Код
<p id="coords1">Координаты курсора:</p> <div class="hover"> <p><b>Наведи курсор сюда</b></p> <p id="coords2">Координаты курсора:</p> </div>
.hover { width: 100%; height: 200px; border: #000 solid 1px; padding: 20px; box-sizing: border-box; }
$(document).ready(function(){ // Координаты курсора относительно всего документа $(document).mousemove(function(event){ var x = event.pageX; var y = event.pageY; $('#coords1').html( 'Координаты курсора: (' + x + '; ' + y + ')' ); }); // Координаты курсора относительно отдельного блока $('.hover').mousemove(function(event){ var pos = $(this).offset(); var elem_left = pos.left.toFixed(0); var elem_top = pos.top.toFixed(0); var x = event.pageX - elem_left; var y = event.pageY - elem_top; $('#coords2').html( 'Координаты курсора: (' + x + '; ' + y + ')' ); }); });
Демонстрация
Координаты курсора:
Наведи курсор сюда
Координаты курсора:
- Координаты курсора мышки относительно экрана монитора, страницы или окна браузера
- Координаты курсора мышки относительно элемента
- Координаты элемента
- Размер элемента
- Размер экрана монитора, страницы, окна браузера
- Кнопка «ВВЕРХ» для сайта
Координаты курсора мышки относительно экрана монитора, страницы или окна браузера
Представленные ниже свойства возвращают в px координаты курсора мышки относительно верхнего левого угла
- экрана монитора (
screenX
/Y
), - HTML-дкумента (
pageX
/Y
), - области просмотра окна браузера (
clientX
/Y
).
<script> window.addEventListener('click', function(e) { alert('screen: ' + e.screenX + 'x' + e.screenY + 'npage: ' + e.pageX + 'x' + e.pageY + 'nclient: ' + e.clientX + 'x' + e.clientY); }, false); </script>
Образец (щелчок по любому месту зелёного прямоугольника):
Определить элемент, который находится под курсором
document.elementFromPoint(X, Y)
возвращает верхний элемент, который находится на координатах (X, Y)
относительно верхнего левого угла области просмотра окна браузера.
<script> window.addEventListener('click', function(e) { alert(document.elementFromPoint(e.clientX, e.clientY).tagName); }, false); </script>
Образец (щелчок по любому месту зелёного прямоугольника):
Курсор находится над тегом
первый второй
третий
Дополнение: этот же код применяется чтобы узнать место, куда нажал пользователь сенсорного устройства (планшет, телефон).
Координаты курсора мышки внутри элемента (div, img)
В Mozilla Firefox не работают offsetX
и offsetY
. Самое простое решение проблемы указано тут:
<style> #div { position: relative; height: 10em; background: green; } </style> <div id="div"></div> <script> document.getElementById('div').onclick = function(e) { var x = e.offsetX==undefined?e.layerX:e.offsetX; var y = e.offsetY==undefined?e.layerY:e.offsetY; alert(x +'x'+ y); } </script>
Образец (щелчок по любому месту зелёного прямоугольника):
Дополнение: этот же код применяется чтобы узнать место, куда нажал пользователь сенсорного устройства (планшет, телефон).
Координаты расположения элемента
Расстояние от верхнего/левого края окна браузера до элемента
Метод elem.getBoundingClientRect()
возвращает в px координаты элемента относительно верхнего левого угла области просмотра окна браузера
<style> #div { height: 10em; background: green; } </style> <div id="div"></div> <script> var div = document.getElementById('div'); window.addEventListener('scroll', raz, false); window.addEventListener('resize', raz, false); function raz() { var rect = div.getBoundingClientRect(); div.innerHTML = 'top: ' + rect.top + '<br>right: ' + rect.right + '<br>bottom: ' + rect.bottom + '<br>left: ' + rect.left + '<br>width: ' + rect.width + '<br>height: ' + rect.height; } </script>
Образец (прокрутка или изменение окна браузера, изменение размера элемента):
elem.getBoundingClientRect().width/height
поддерживаются с IE9 [developer.mozilla.org]. Кроссбраузерное решение:
width = elem.getBoundingClientRect().right - elem.getBoundingClientRect().left height = elem.getBoundingClientRect().bottom - elem.getBoundingClientRect().top
Практическое применение: Прилипающий при скроллинге блок
Расстояние от правого/нижнего края окна браузера до элемента
Чтобы узнать отступ справа или снизу от элемента до края области просмотра окна браузера:
<style> #div { height: 10em; background: green; } </style> <div id="div"></div> <script> window.addEventListener('scroll', raz2, false); window.addEventListener('resize', raz2, false); function raz2() { var div = document.getElementById('div'), rect = div.getBoundingClientRect(), d = document.documentElement, rectD = d.getBoundingClientRect(); div.innerHTML = 'top: ' + rect.top + '<br>right: ' + (rectD.right - rect.right) + '<br>bottom: ' + (d.clientHeight - rect.bottom) + '<br>left: ' + rect.left + '<br>width: ' + rect.width + '<br>height: ' + rect.height; } </script>
Образец (прокрутка или изменение окна браузера, изменение размера элемента):
Практическое применение: Элемент находится в видимой области окна браузера
Позиция одного элемента относительно другого
Рассчитать позицию одного элемента относительно другого (например, потомка относительно предка) можно, если получить разницу их координат (например, координаты родителя вычесть из координат дочернего элемента):
<style> #div { background: green; } #div sub { background: yellow; } </style> <div id="div"><sub>Нижний индекс</sub></div> <script> var div = document.getElementById('div'); div.childNodes[0].innerHTML = 'Расстояние до нижнего индекса: ' + (div.childNodes[0].getBoundingClientRect().top - div.getBoundingClientRect().top) + 'px'; </script>
Нижний индекс
Смещение относительно elem.offsetParent
elem.offsetParent
возвращает ближайшего родителя, имеющего position
не static
, если у самого элемента elem
установлено position: absolute;
. Положение элемента относительно elem.offsetParent
показывают elem.offsetLeft
/Top
(IE≥8).
<style> #div { position: relative; height: 10em; background: green; overflow: auto; } #div div { position: absolute; height: 8em; width: 90%; margin: 1em 5%; background: yellow; } </style> <div id="div"> <div></div> </div> <script> var div = document.querySelector('#div div'); div.innerHTML = 'offsetParent: ' + div.offsetParent + '<br>left: ' + div.offsetLeft + '<br>top: ' + div.offsetTop; </script>
Размер элемента: ширина, высота, прокрутка
ширина содержимого элемента | elem.scrollWidth (IE≥8)
|
---|---|
высота содержимого элемента | elem.scrollHeight (IE≥8)
|
ширина элемента | elem.offsetWidth
|
elem.getBoundingClientRect().width
|
|
высота элемента | elem.offsetHeight
|
elem.getBoundingClientRect().height
|
|
border-left-width |
elem.clientLeft
|
border-top-width |
elem.clientTop
|
ширина_элемента — border-left-width — border-right-width — полоса_прокрутки |
elem.clientWidth
|
высота_элемента — border-top-width — border-bottom-width — полоса_прокрутки |
elem.clientHeight
|
горизонтальная прокрутка содержимого элемента | elem.scrollLeft
|
вертикальная прокрутка содержимого элемента | elem.scrollTop
|
Получить значение свойства CSS можно благодаря getComputedStyle(elem[, pseudo])
. Предварительно советую ознакомиться с блочной моделью CSS.
<style> #div { height: 10em; padding: 1em; border: 1.5em solid gray; overflow: auto; resize: both; } #div div { height: 20em; background: yellow; } </style> <div id="div"> <div></div> </div> <script> var div = document.querySelector('#div'); alert('scrollWidth x scrollHeight: ' + div.scrollWidth + 'x' + div.scrollHeight + 'nscrollLeft x scrollTop: ' + div.scrollLeft + 'x' + div.scrollTop + 'noffsetWidth x offsetHeight: ' + div.offsetWidth + 'x' + div.offsetHeight + 'ngetBoundingClientRect().width x getBoundingClientRect().height: ' + div.getBoundingClientRect().width + 'x' + div.getBoundingClientRect().height + 'nclientLeft x clientTop' + div.clientLeft + 'x' + div.clientTop + 'nclientWidth x clientHeight: ' + div.clientWidth + 'x' + div.clientHeight + 'ngetComputedStyle(elem).width x getComputedStyle(elem).height: ' + getComputedStyle(div).width + ' x ' + getComputedStyle(div).height); </script>
Образец (щелчок по прямоугольнику с серой рамкой, его изменение или прокрутка содержимого):
Размер монитора, страницы, окна браузера: ширина, высота, прокрутка
разрешение экрана монитора | window.screen.width/height
|
---|---|
доступный размер экрана монитора | window.screen.availWidth/Height
|
прокрутка (расстояние от верхнего левого угла страницы) | window.scrollX/Y (без IE)
|
window.pageXOffset/pageYOffset (IE≥9)
|
|
document.documentElement.scrollLeft/scrollTop
|
|
document.documentElement.getBoundingClientRect().left/top
|
|
максимально возможная прокрутка | window.scrollMaxX/Y (только Mozilla Firefox)
|
размер окна браузера | window.outerWidth/Height (IE≥9)
|
размер области просмотра окна браузера | window.innerWidth/Height (IE≥9)
|
размер области просмотра окна браузера без полосы прокрутки | document.documentElement.clientWidth/Height
|
расстояние от верхнего левого угла монитора до окна браузера | window.screenX/Y (IE≥9, см. window.screenLeft/Top )
|
Размер страницы, учитывающий transform и margin для <html>
, который можно получить, пока страница не была прокручена.
var rect = document.documentElement.getBoundingClientRect(), b = document.body, maxWidth = Math.max( rect.right, b.scrollWidth ), maxHeight = Math.max( rect.bottom, b.scrollHeight );
Образец (изменение, прокрутка содержимого окна браузера):
0
Практическое применение: Открыть ссылку в новом окне заданного размера
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
https://msdn.microsoft.com/en-us/library/hh781509%28v=vs.85%29.aspx