2013-03-21 225 views
1

我想用鼠標點擊從div獲得X/Y座標。用鼠標點擊獲取X/Y座標

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,使用。對()代替。 – 2013-03-21 14:45:56

+0

你想如何限制它?你想讓計數重新開始並刪除以前的計數?或者你想讓它更新最後一個,然後離開?或者只是停止發佈限制? – 2013-03-21 16:03:38

+0

只是停止張貼在限制。即極限= 5,所以只顯示5個座標。刪除座標並再次設置限制的功能也會很酷。 – paul 2013-03-21 16:11:58

回答

2

這裏正是參觀你的陣列你問了。

小提琴: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和刪除一個。

小提琴: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

cool!非常感謝你jonny!棒極了! :) – paul 2013-03-22 08:27:23

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 2013-03-21 15:09:55

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 2013-03-21 15:08:44

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 2013-03-21 15:09:08

+0

歡迎您:) – 2013-03-21 15:10:23

+0

你知道我怎麼可以限制點擊?所以我可以說你只能點擊5次,然後停下來,也許我可以刪除列表中的座標,或者它太棘手,不能解決這個問題? ('。clickable')。off(「click」) – paul 2013-03-21 16:03:29