Как найти координаты в браузере

711

2124

Получить координаты курсора на экране

Предлагаем Вам простой JavaScript код, отображающий текущие координаты курсора на экране. Координаты берутся относительно
окна странички и не превышают разрешение экрана.

Данный скрипт позволяет выводить координаты курсора как в statusbar-е, так и в заданном месте странички.

Текущие координаты курсора:

Для получения текущих координат курсора на экране сайта вставьте на свою страничку следующий скрипт:

JavaScript код:

<script type="text/javascript">
function 
init() {
    if (
document.layersdocument.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 + ')' );
	});
});

Демонстрация

Координаты курсора:

Наведи курсор сюда

Координаты курсора:

  • Координаты курсора мышки относительно экрана монитора, страницы или окна браузера
  • Координаты курсора мышки относительно элемента
  • Координаты элемента
  • Размер элемента
  • Размер экрана монитора, страницы, окна браузера
  • Кнопка «ВВЕРХ» для сайта

Координаты курсора мышки относительно экрана монитора, страницы или окна браузера

Демонстрация screenX/screenY, pageX/pageY, clientX/clientY

Представленные ниже свойства возвращают в 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>

Образец (щелчок по любому месту зелёного прямоугольника):

Дополнение: этот же код применяется чтобы узнать место, куда нажал пользователь сенсорного устройства (планшет, телефон).

Координаты расположения элемента

Расстояние от верхнего/левого края окна браузера до элемента

Демонстрация getBoundingClientRect()

Метод 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>

Размер элемента: ширина, высота, прокрутка

Демонстрация scrollWidth/Height, scrollLeft/scrollTop, offsetWidth/Height, clientLeft/Top, clientWidth/Height

ширина содержимого элемента 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-widthborder-right-width — полоса_прокрутки elem.clientWidth
высота_элемента — border-top-widthborder-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>

Образец (щелчок по прямоугольнику с серой рамкой, его изменение или прокрутка содержимого):

Размер монитора, страницы, окна браузера: ширина, высота, прокрутка

Демонстрация screen.width/height, window.outerWidth/Height, window.innerWidth/Height, window.screenX/Y, window.scrollX/Y

разрешение экрана монитора 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

Понравилась статья? Поделить с друзьями:
  • Как составить схему движения от дома до школы
  • Как найти центр тяжести фигуры в автокаде
  • Что делать если плохая кредитная история как исправить
  • Как найти второй замечательный предел
  • Как найти края на изображении