我正在研究HTML5中可调整大小和可拖动的矩形 这是我的JSFiddle链接here 在这段代码中,我能够绘制可调整大小的矩形,但无法通过鼠标事件进行拖动。
//Make the DIV element draggagle:
dragElement(document.getElementById("mydiv"));
function dragElement(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
if (document.getElementById(elmnt.id + "header")) {
/* if present, the header is where you move the DIV from:*/
document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown;
} else {
/* otherwise, move the DIV from anywhere inside the DIV:*/
elmnt.onmousedown = dragMouseDown;
}
function dragMouseDown(e) {
Move
e = e || window.event;
e.preventDefault();
// get the mouse cursor position at startup:
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
// call a function whenever the cursor moves:
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
// calculate the new cursor position:
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
// set the element's new position:
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
/* stop moving when mouse button is released:*/
document.onmouseup = null;
document.onmousemove = null;
}
}
答案 0 :(得分:1)
要使用Jquery UI拖放形状,我们可以设置draggable
属性
实例化形状时为true,或者可以使用draggable()
方法。
draggable()
方法可在台式机和移动设备上进行拖放
自动应用。
在这里http://jsfiddle.net/rupomkhondaker/a8tdh0qu/
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
rect = {},
drag = false,
mouseX,
mouseY,
closeEnough = 10,
dragTL = dragBL = dragTR = dragBR = false;
function init() {
canvas.addEventListener('mousedown', mouseDown, false);
canvas.addEventListener('mouseup', mouseUp, false);
canvas.addEventListener('mousemove', mouseMove, false);
rect = {
startX: 100,
startY: 200,
w: 300,
h: 200
}
}
function mouseDown(e) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
// if there isn't a rect yet
if (rect.w === undefined) {
rect.startX = mouseY;
rect.startY = mouseX;
dragBR = true;
}
// if there is, check which corner
// (if any) was clicked
//
// 4 cases:
// 1. top left
else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY)) {
dragTL = true;
}
// 2. top right
else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY)) {
dragTR = true;
}
// 3. bottom left
else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY + rect.h)) {
dragBL = true;
}
// 4. bottom right
else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY + rect.h)) {
dragBR = true;
}
// (5.) none of them
else {
// handle not resizing
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
draw();
}
function checkCloseEnough(p1, p2) {
return Math.abs(p1 - p2) < closeEnough;
}
function mouseUp() {
dragTL = dragTR = dragBL = dragBR = false;
}
function mouseMove(e) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
if (dragTL) {
rect.w += rect.startX - mouseX;
rect.h += rect.startY - mouseY;
rect.startX = mouseX;
rect.startY = mouseY;
} else if (dragTR) {
rect.w = Math.abs(rect.startX - mouseX);
rect.h += rect.startY - mouseY;
rect.startY = mouseY;
} else if (dragBL) {
rect.w += rect.startX - mouseX;
rect.h = Math.abs(rect.startY - mouseY);
rect.startX = mouseX;
} else if (dragBR) {
rect.w = Math.abs(rect.startX - mouseX);
rect.h = Math.abs(rect.startY - mouseY);
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
draw();
}
function draw() {
ctx.fillStyle = "#222222";
ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);
drawHandles();
}
function drawCircle(x, y, radius) {
ctx.fillStyle = "#FF0000";
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI);
ctx.fill();
}
function drawHandles() {
drawCircle(rect.startX, rect.startY, closeEnough);
drawCircle(rect.startX + rect.w, rect.startY, closeEnough);
drawCircle(rect.startX + rect.w, rect.startY + rect.h, closeEnough);
drawCircle(rect.startX, rect.startY + rect.h, closeEnough);
}
init();
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
rect = {},
drag = false,
mouseX,
mouseY,
closeEnough = 10,
dragTL = dragBL = dragTR = dragBR = false;
function init() {
canvas.addEventListener('mousedown', mouseDown, false);
canvas.addEventListener('mouseup', mouseUp, false);
canvas.addEventListener('mousemove', mouseMove, false);
rect = {
startX: 100,
startY: 200,
w: 300,
h: 200
}
}
function mouseDown(e) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
// if there isn't a rect yet
if (rect.w === undefined) {
rect.startX = mouseY;
rect.startY = mouseX;
dragBR = true;
}
// if there is, check which corner
// (if any) was clicked
//
// 4 cases:
// 1. top left
else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY)) {
dragTL = true;
}
// 2. top right
else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY)) {
dragTR = true;
}
// 3. bottom left
else if (checkCloseEnough(mouseX, rect.startX) && checkCloseEnough(mouseY, rect.startY + rect.h)) {
dragBL = true;
}
// 4. bottom right
else if (checkCloseEnough(mouseX, rect.startX + rect.w) && checkCloseEnough(mouseY, rect.startY + rect.h)) {
dragBR = true;
}
// (5.) none of them
else {
// handle not resizing
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
draw();
}
function checkCloseEnough(p1, p2) {
return Math.abs(p1 - p2) < closeEnough;
}
function mouseUp() {
dragTL = dragTR = dragBL = dragBR = false;
}
function mouseMove(e) {
mouseX = e.pageX - this.offsetLeft;
mouseY = e.pageY - this.offsetTop;
if (dragTL) {
rect.w += rect.startX - mouseX;
rect.h += rect.startY - mouseY;
rect.startX = mouseX;
rect.startY = mouseY;
} else if (dragTR) {
rect.w = Math.abs(rect.startX - mouseX);
rect.h += rect.startY - mouseY;
rect.startY = mouseY;
} else if (dragBL) {
rect.w += rect.startX - mouseX;
rect.h = Math.abs(rect.startY - mouseY);
rect.startX = mouseX;
} else if (dragBR) {
rect.w = Math.abs(rect.startX - mouseX);
rect.h = Math.abs(rect.startY - mouseY);
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
draw();
}
function draw() {
ctx.fillStyle = "#222222";
ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);
drawHandles();
}
function drawCircle(x, y, radius) {
ctx.fillStyle = "#FF0000";
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI);
ctx.fill();
}
function drawHandles() {
drawCircle(rect.startX, rect.startY, closeEnough);
drawCircle(rect.startX + rect.w, rect.startY, closeEnough);
drawCircle(rect.startX + rect.w, rect.startY + rect.h, closeEnough);
drawCircle(rect.startX, rect.startY + rect.h, closeEnough);
}
init();
$('#canvas').on('mousedown', function() {
$("#canvas").draggable();
}).on('mouseup mouseleave', function() {
});
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #F0F0F0;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.js"></script>
<meta charset="utf-8">
<title>Firefog Drag</title>
</head>
<body>
<p>Drag the corners to resize</p>
<canvas id="canvas" width=500 height=500></canvas>
</body>
</html>
答案 1 :(得分:1)
您可以使用jquery.ui.css来实现。
$("#canvas").draggable();
使用鼠标左键拖动框并使用鼠标右键单击调整框大小
click here to check this fiddle
用于删除按钮
<input type="button" value="Delete" id="btnDelete"/>
$("#btnDelete").click(function () {
$("#canvas").remove();
});