Ниже приведенная функция getPosition()
получает текущие координаты курсора. Используя ее в разных jQuery событиях можно получить координаты клика или координаты курсора когда он находится над определенным элементом.
function getPosition(e){
var x = y = 0;
if (!e) {
var e = window.event;
}
if (e.pageX || e.pageY){
x = e.pageX;
y = e.pageY;
} else if (e.clientX || e.clientY){
x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
return {x: x, y: y}
}
Использование
/* Координаты курсора */
$('body').mousemove(function(e){
var coord = getPosition(e);
$('#coord-live').html(coord.x + "," + coord.y);
});
/* Координаты клика */
$('body').click(function(e){
var coord = getPosition(e);
$('#coord-click').html(coord.x + "," + coord.y);
});
Метод getBoundingClientRect()
возвращает объект DOMRect, который содержит размеры элемента и его положение относительно видимой области просмотра.
Если из координат курсора мыши (e.clientX
и e.clientY
) вычесть положение элемента, то можно получить внутреннее положение курсора и клика.
<p>
<strong>Координаты курсора:</strong> <span id="coord-live"></span><br>
<strong>Координаты клика:</strong> <span id="coord-click"></span>
</p>
<div class="element"></div>
$('.element').mousemove(function(e){
var target = this.getBoundingClientRect();
var x = e.clientX - target.left;
var y = e.clientY - target.top;
$('#coord-live').html(x + ', ' + y);
});
$('.element').click(function(e){
var target = this.getBoundingClientRect();
var x = e.clientX - target.left;
var y = e.clientY - target.top;
$('#coord-click').html(x + ', ' + y);
});
Также можно определить в какой части элемента находится курсор:
По вертикали
$('.element').mouseleave(function(e){
$('#coord-live').html('за пределами элемента');
});
$('.element').mousemove(function(e){
var share = $(this).height() / 3;
var target = this.getBoundingClientRect();
var y = e.clientY - target.top;
if (y >= 0 && y <= share) {
$('#coord-live').html('в верхней части');
} else if (y > share && y <= $(this).height() - share) {
$('#coord-live').html('в центре');
} else {
$('#coord-live').html('в нижней части');
}
});
По горизонтали
$('.element').mouseleave(function(e){
$('#coord-live').html('за пределами элемента');
});
$('.element').mousemove(function(e){
var share = $(this).width() / 3;
var target = this.getBoundingClientRect();
var x = e.clientX - target.left;
if (x >= 0 && x <= share) {
$('#coord-live').html('в левой части');
} else if (x > share && x <= $(this).width() - share) {
$('#coord-live').html('в центре');
} else {
$('#coord-live').html('в правой части');
}
});