在canvas画布上实现一一个矩形,并且矩形支持鼠标拖拽,效果如下图。
时间: 2023-03-02 19:24:55 浏览: 129
好的,以下是实现矩形并支持鼠标拖拽的代码示例:
HTML代码:
```html
<canvas id="myCanvas" width="400" height="400"></canvas>
```
JavaScript代码:
```javascript
// 获取画布和上下文
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
// 定义矩形初始位置和大小
var rect = {x: 50, y: 50, width: 100, height: 100};
// 绘制矩形
ctx.fillStyle = "blue";
ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
// 定义拖拽状态和起始鼠标位置
var isDragging = false;
var startMousePosition = {x: 0, y: 0};
// 鼠标按下事件
canvas.addEventListener("mousedown", function(event) {
// 判断是否在矩形内部
if (event.offsetX >= rect.x && event.offsetX <= rect.x + rect.width && event.offsetY >= rect.y && event.offsetY <= rect.y + rect.height) {
isDragging = true;
startMousePosition.x = event.offsetX;
startMousePosition.y = event.offsetY;
}
});
// 鼠标移动事件
canvas.addEventListener("mousemove", function(event) {
if (isDragging) {
// 计算鼠标移动距离
var deltaX = event.offsetX - startMousePosition.x;
var deltaY = event.offsetY - startMousePosition.y;
// 更新矩形位置
rect.x += deltaX;
rect.y += deltaY;
// 重新绘制矩形
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "blue";
ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
// 更新起始鼠标位置
startMousePosition.x = event.offsetX;
startMousePosition.y = event.offsetY;
}
});
// 鼠标松开事件
canvas.addEventListener("mouseup", function(event) {
isDragging = false;
});
```
在这个代码示例中,我们首先定义了矩形的初始位置和大小,然后在画布上绘制了这个矩形。接下来,我们监听了画布上的鼠标按下、移动和松开事件,实现了拖拽矩形的功能。具体实现方式是:当鼠标按下时,判断鼠标是否在矩形内部,如果是,将拖拽状态设置为 true,记录起始鼠标位置。当鼠标移动时,如果拖拽状态为 true,计算鼠标移动距离,更新矩形位置,重新绘制矩形,更新起始鼠标位置。当鼠标松开时,将拖拽状态设置为 false。
阅读全文