gpt4 book ai didi

javascript - 使用单击、鼠标移动和单击绘制矩形

转载 作者:行者123 更新时间:2023-12-03 02:19:21 25 4
gpt4 key购买 nike

我试图通过用户单击、鼠标移动和单击来绘制一个矩形。我的代码有两个问题。

首先,绘制一个矩形后,会自动假定将绘制另一个矩形。其次,第二个矩形的起点是创建第一个矩形的最后一次单击。

http://jsbin.com/uqonuw/3/edit

最佳答案

你很接近。因此,问题实际上并不是 HTML5 中的“canvas”元素,而是真正是 div 的 Canvas 。

http://jsfiddle.net/d9BPz/546/

为了让我了解您的代码想要完成的任务,我必须对其进行整理。需要发生的是跟踪方形元素。

每次点击 Canvas 时,我们都会做两件事之一。我们要么创建一个矩形元素,要么完成一个矩形元素。因此,当我们完成后,将“element”(以前称为“d”)设置为 null 是有意义的。创建元素时,我们必须将新的 DOM 元素分配给“element”。

每次鼠标移动时,我们都想获取鼠标的位置。如果元素正在创建过程中(或“非空”),那么我们需要调整元素的大小。

然后我们将其全部包装在一个函数中,这就是它的全部内容:

function initDraw(canvas) {
var mouse = {
x: 0,
y: 0,
startX: 0,
startY: 0
};
function setMousePosition(e) {
var ev = e || window.event; //Moz || IE
if (ev.pageX) { //Moz
mouse.x = ev.pageX + window.pageXOffset;
mouse.y = ev.pageY + window.pageYOffset;
} else if (ev.clientX) { //IE
mouse.x = ev.clientX + document.body.scrollLeft;
mouse.y = ev.clientY + document.body.scrollTop;
}
};

var element = null;
canvas.onmousemove = function (e) {
setMousePosition(e);
if (element !== null) {
element.style.width = Math.abs(mouse.x - mouse.startX) + 'px';
element.style.height = Math.abs(mouse.y - mouse.startY) + 'px';
element.style.left = (mouse.x - mouse.startX < 0) ? mouse.x + 'px' : mouse.startX + 'px';
element.style.top = (mouse.y - mouse.startY < 0) ? mouse.y + 'px' : mouse.startY + 'px';
}
}

canvas.onclick = function (e) {
if (element !== null) {
element = null;
canvas.style.cursor = "default";
console.log("finsihed.");
} else {
console.log("begun.");
mouse.startX = mouse.x;
mouse.startY = mouse.y;
element = document.createElement('div');
element.className = 'rectangle'
element.style.left = mouse.x + 'px';
element.style.top = mouse.y + 'px';
canvas.appendChild(element)
canvas.style.cursor = "crosshair";
}
}
}

用法:传递您想要制作矩形 Canvas 的 block 级元素。示例:

<!doctype html>
<html>
<head>
<style>
#canvas {
width:2000px;
height:2000px;
border: 10px solid transparent;
}
.rectangle {
border: 1px solid #FF0000;
position: absolute;
}
</style>
</head>
<body>
<div id="canvas"></div>
<script src="js/initDraw.js"></script>
<script>
initDraw(document.getElementById('canvas'));
</script>
</body>
</html>

关于javascript - 使用单击、鼠标移动和单击绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com