[英]drawing rectangles on an image in javascript
我正在嘗試編寫一個簡單的java腳本程序來標記圖像上的矩形。 單擊按鈕添加矩形,然后單擊左上角和右下角,程序應將矩形標記為紅色。 我正在使用jquery直接javascript。
一切都近乎工作,除非在這種情況下矩形的左上角或右下角在另一個矩形內,而在處理click事件時,x和y不正確。
我一直試圖解決這個問題幾個小時,谷歌沒有幫助。 我特意試過:
顯然我錯過了一些不允許我這樣做的東西,但我不確切知道是什么。
我創建了一個jsfiddle,其中包含一個顯示問題的示例 。 但是如果你不想點擊它,這是我的JS代碼:
var rects = [{x1: 708, y1: 246, x2: 738, y2: 277},
{x1: 442, y1: 239, x2: 474, y2: 271},
{x1: 676, y1: 242, x2: 703, y2: 270}];
var $container = $("#container");
var click_count = 0;
var added_rects = 0;
var waiting_for_clicks = false;
var new_rects = [];
var current_rect = {};
var add_rect = function(color, rect) {
$('<div class="child"/>')
.appendTo($container)
.css("left", rect.x1 + "px")
.css("top", rect.y1 + "px")
.css("width", (rect.x2-rect.x1)+"px")
.css("height", (rect.y2-rect.y1)+"px")
.css("border", "1px solid " + color);
};
var remove_last_rect = function() {
if (new_rects.length > 0) {
$container.children('div:last-child').remove();
new_rects.pop();
}
}
_.map(rects, _.partial(add_rect, 'red'));
var listen_for_rect = function() {
click_count = 0;
waiting_for_clicks = true;
current_rect = {x1: -1, y1: -1, x2: -1, y2: -1};
$('#add-rect').attr('disabled', 'disabled');
$('#remove-rect').attr('disabled', 'disabled');
};
var stop_listening_for_rects = function() {
waiting_for_clicks = false;
$("#add-rect").removeAttr('disabled');
$('#remove-rect').removeAttr('disabled');
add_rect('red', current_rect);
new_rects.push(current_rect);
}
$('#add-rect').click(function(e) {
e.preventDefault();
listen_for_rect();
});
$('#remove-rect').click(function(e) {
remove_last_rect();
if (new_rects.length == 0) $(this).attr('disabled', 'disabled');
});
var click_event = function(e) {
e.preventDefault();
if (waiting_for_clicks) {
click_count++;
var offset = $(this).offset();
var x = e.pageX-offset.left;
var y = e.pageY-offset.top;
console.log(x);
console.log(y);
if (click_count == 1) {
current_rect.x1 = x;
current_rect.y1 = y;
} else if (click_count == 2) {
current_rect.x2 = x;
current_rect.y2 = y;
stop_listening_for_rects();
}
}
};
$container.on('click', '.child', click_event);
$('img').click(click_event);
// console.log($('.child'));
如果單擊rect內部,則x和y坐標相對於rect的左上角,而不是圖像的左上角。
原因是,$(this).offset()返回您單擊的元素的偏移量,而不是圖像的偏移量,因此當您在rect內部單擊時,它將返回rect的偏移量。
在click_event = function(e) {
嘗試這個click_event = function(e) {
:
var offset = $("img").offset();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.