javascript - 如何在 JavaScript 中创建一个可调整大小的矩形?

标签 javascript html html5-canvas

我的意思是,用户在 HTML Canvas 上的 xy 点处按下鼠标按钮,按下鼠标按钮时,可以根据固定 xy 点的光标的移动来调整矩形的大小。就像突出显示的工作原理一样。

这是我到目前为止所得到的,但它似乎不起作用:

 canvas.addEventListener('mousedown', function(e){

var rectx = e.clientX;
var recty = e.clientY;

canvas.onmousemove = function(e){     



    var df = e.clientX;
    var fg = e.clientY;
};


context.rect(rectx, recty, df-rectx, fg-recty);
context.stroke();




}, false);              

最佳答案

假设您的 Canvas 上下文中没有转换(缩放翻译)。

创建可调整大小的矩形的基本步骤如下:

  1. 创建一个 mousedown 监听器,设置一个标志,指示用户按住鼠标按钮,并设置“ anchor ”或初始坐标。

    <
  2. 创建一个取消设置标志的mouseup监听器。

  3. 创建一个 mousemove 监听器,如果标志指示鼠标已按下,则根据鼠标坐标重新绘制 Canvas ,并更改矩形的大小。

重要的一点是,事件对象中的客户端坐标是相对于页面的,而不是 Canvas 元素。您经常需要将 clientXclientY 转换为 Canvas 坐标:

var getCanvasCoords = function (clientX, clientY) {
    var rect = canvas.getBoundingClientRect();

    return {
        x: clientX - rect.left,
        y: clientY - rect.top
    };
};

前两个步骤如下所示:

var anchorX;
var anchorY;
var mouseDown = false;    

canvas.addEventListener('mousedown', function (event) {
    var coords = getCanvasCoords(event.clientX, event.clientY);
    anchorX = coords.x;
    anchorY = coords.y;

    mouseDown = true;
});

canvas.addEventListener('mouseup', function (event) {
    mouseDown = false;
});

以及mousemove处理程序:

canvas.addEventListener('mousemove', function (event) {
    var coords = getCanvasCoords(event.clientX, event.clientY);

    var width = coords.x - anchorX;
    var height = coords.y - anchorY;

    // clear canvas for redrawing
    context.clearRect(0, 0, canvas.width, canvas.height);

    context.fillRect(anchorX, anchorY, width, height);
});

关于javascript - 如何在 JavaScript 中创建一个可调整大小的矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745072/

相关文章:

php - 显示错误而不是 "Server Error"

html - Flexbox:Div 高度依赖于同级 div

html - 为什么垂直对齐受 Crimson Text 字体的字体粗细影响?

javascript - 从 SVG 创建 Paper.js PathItem

javascript - Google Charts - 组合图表示例问题

javascript - 如何使用模态框单独加载文本?

javascript - 仅当数组元素尚不存在时,如何将其插入数据库

javascript - 单击几下后如何禁用按钮功能?

javascript - 为 HTML5 Canvas 上的图像动态添加边框

javascript - Canvas :如何围绕指定的紫色点绘制从指定的橙色点到指定的绿色点的螺旋线