2013-03-21 3 views
1

Я пытаюсь получить координаты X/Y из div с помощью мышки.Получить координаты X/Y с Mouseclick

I allready use this script:

Теперь я хочу, чтобы собрать больше X/Y координаты, а не только один. , поэтому, если я нажимаю в div два или более раза, я хочу перечислить координаты под div.

<div>"click" 
"click"</div> 
------------------------ 
coordinates 1: X/Y 
coordinates 2: X/Y 
. 
. 
. 

Кто-нибудь знает, как я это делаю?

+1

Мы не используем .bind(), так как JQuery 1.7, используйте .он() вместо этого. –

+0

Как вы хотите это ограничить? Вы хотите, чтобы подсчет начинался и удалял предыдущие? Или вы хотите, чтобы он обновил последний и оставил остальные? Или просто прекратите публикацию на лимите? –

+0

просто прекратите публикацию на лимите. т. е. предел = 5, так что будет показано всего 5 координат. функция, чтобы удалить координату и установить ограничение снова, тоже будет круто. – paul

ответ

2

Вот именно то, что вы просили.

Fiddle: http://jsfiddle.net/ZZEk8/118/

Добавить в HTML:

<span class="log"></span> 

JS:

var clicks = [], 
    updatedClicks = ""; 
$('.clickable').on('click', function (ev) { //We don't use .bind() after jQuery 1.7, use .on() now. 
    var $div = $(ev.target); 
    var $display = $div.find('.display'); 

    var offset = $div.offset(); 
    var x = ev.clientX - offset.left; 
    var y = ev.clientY - offset.top; 

    $display.text('x: ' + x + ', y: ' + y); 
    clicks.push(x + "/" + y); 

    updatedClicks += "coordinates" + " " + clicks.length + ":" + " " + clicks[clicks.length -1] + "<br />"; 

    $('.log').html(updatedClicks); 
}); 

UPDATE: OP запросил способ ограничить COORDS и удалить один.

Fiddle: http://jsfiddle.net/ZZEk8/125/

var clicks = [], 
    updatedClicks = [], 
    limit = 5; 

$('.clickable').on('click', function (ev) { 
    var $div = $(ev.target); 
    var $display = $div.find('.display'); 

    var offset = $div.offset(); 
    var x = ev.clientX - offset.left; 
    var y = ev.clientY - offset.top; 

    $display.text('x: ' + x + ', y: ' + y); 

    //Stops adding at limit 
    if (clicks.length < limit){ 
     addCoord(x,y); 
    } 
}); 

$('.delete').on('change', function(ev) { 
    if(clicks.length){ 
     var selection = this.value -1; 
     deleteCoord(selection); 
    } else { //If there are no coords to delete run this 
     return false; 
    } 
}); 

function addCoord (x,y){ 
    clicks.push(x + "/" + y); 

    updatedClicks.push("Coordinates" + ":" + " " + clicks[clicks.length -1] + "<br />"); 

    $('.log').html(updatedClicks.join(" ")); 
} 

function deleteCoord(selection) { 
    clicks.splice(selection, 1); 
    updatedClicks.splice(selection, 1); 
    $('.log').html(updatedClicks.join(" ")); 
} 
+0

круто! большое спасибо jonny! это потрясающе! :) – paul

2

Добавить новый элемент <div id="log"></div> после вашего существующего элемента.

В коде JavaScript добавить

document.getElementById("log").innerHTML += "<br/>Coordinates: X=" + x + "; Y=" + y; 

В вашем jsfiddle Например:

$display.html($display.html() + '<br/> x: ' + x + ', y: ' + y); 
+0

эй knagis! благодаря! :) – paul

1

я сделать это с помощью div элементов, но вы можете изменить его.
См fiddle

Мои изменения JS является

$display.append($('<div />').text('x: ' + x + ', y: ' + y)); 

И в HTML

<div class='clickable'> 
    <div class='display'></div> 
</div> 

Или this one с srollbar, когда это необходимо.

+0

спасибо! что мне очень помогло! :) – paul

1

Если вы хотите сохранить координаты, вы можете собрать их в массиве, например:

//Declare an array with 0 length 
var arr = new Array(0); 
$('.clickable').bind('click', function (ev) { 
var $div = $(ev.target); 
var $display = $div.find('.display'); 

var offset = $div.offset(); 
var x = ev.clientX - offset.left; 
var y = ev.clientY - offset.top; 

$display.text('x: ' + x + ', y: ' + y); 
//increase the length of array before insert the value of coords 
arr.length = arr.length+1; 
//insert the value 
arr[arr.length-1] = "coordinates" + arr.length + ":" + x +"/" + y; 
}); 

Затем, чтобы работать координаты вы можете объехать ваш массив с для цикла

+0

эй igor! Спасибо! это сработало и для меня! :) – paul

+0

приветствуется :) –

+0

Знаете ли вы, как я могу ограничить клики? так что я могу сказать, что вы можете нажать только 5 раз, а затем остановиться и, может быть, я смогу удалить координаты в списке, или это слишком сложно решить, как это сделать? – paul

Смежные вопросы