Các vấn đề cơ bản cho một cái gì đó như thế này là khá đơn giản, khi bạn nghĩ về nó:
- Nghe
mousedown
sự kiện trên một số container (có thể toàn bộ tài liệu);
- Đặt phần tử được định vị hoàn toàn ở vị trí của chuột, sử dụng tọa độ chuột từ đối tượng
event
(e.pageX
và e.pageY
);
- Bắt đầu nghe
mousemove
sự kiện để thay đổi đối tượng width
và height
(dựa trên tọa độ chuột);
- Nghe sự kiện
mouseup
để tách người nghe sự kiện mousemove
.
Yếu tố được đặt tuyệt đối nói trên là, ví dụ: <div>
có đường viền và background: transparent
.
Cập nhật: đây là một ví dụ:
$(function() {
var $container = $('#container');
var $selection = $('<div>').addClass('selection-box');
$container.on('mousedown', function(e) {
var click_y = e.pageY;
var click_x = e.pageX;
$selection.css({
'top': click_y,
'left': click_x,
'width': 0,
'height': 0
});
$selection.appendTo($container);
$container.on('mousemove', function(e) {
var move_x = e.pageX,
move_y = e.pageY,
width = Math.abs(move_x - click_x),
height = Math.abs(move_y - click_y),
new_x, new_y;
new_x = (move_x < click_x) ? (click_x - width) : click_x;
new_y = (move_y < click_y) ? (click_y - height) : click_y;
$selection.css({
'width': width,
'height': height,
'top': new_y,
'left': new_x
});
}).on('mouseup', function(e) {
$container.off('mousemove');
$selection.remove();
});
});
});
Demo: http://jsbin.com/ireqix/226/
đó chính xác là những gì tôi cần. cảm ơn! – Andrew
Vì lợi ích của bất kỳ ai theo dõi, tôi đã cập nhật câu trả lời của bạn với giải pháp để kéo theo các hướng khác nhau. – Andrew
Và tôi cần một cái gì đó giống như thế này cho một người lập bản đồ hình ảnh html nhanh (hình chữ nhật chỉ phù hợp với nhu cầu của tôi). Kết hợp các thay đổi kéo-cả hai cách như trên, và xuất ra nguồn bản đồ hình ảnh html. http://jsbin.com/ireqix/91 – frumbert