gpt4 book ai didi

javascript - Fabric.js - 自由绘制矩形

转载 作者:可可西里 更新时间:2023-11-01 01:36:26 24 4
gpt4 key购买 nike

我有以下不能正常工作的:

var canvas = new fabric.Canvas('canvas');


canvas.observe('mouse:down', function(e) { mousedown(e); });
canvas.observe('mouse:move', function(e) { mousemove(e); });
canvas.observe('mouse:up', function(e) { mouseup(e); });


var started = false;


var x = 0;
var y = 0;


/* Mousedown */
function mousedown(e) {

var mouse = canvas.getPointer(e.memo.e);

started = true;

x = mouse.x;
y = mouse.y;

var square = new fabric.Rect({

width: 1,
height: 1,
left: mouse.x,
top: mouse.y,
fill: '#000'

});


canvas.add(square);
canvas.renderAll();
canvas.setActiveObject(square);

}


/* Mousemove */
function mousemove(e) {

if(!started) {

return false;

}

var mouse = canvas.getPointer(e.memo.e);

var x = Math.min(mouse.x, x),
y = Math.min(mouse.y, y),
w = Math.abs(mouse.x - x),
h = Math.abs(mouse.y - y);

if (!w || !h) {

return false;

}

var square = canvas.getActiveObject();

square.set('top', y).set('left', x).set('width', w).set('height', h);

canvas.renderAll();

}


/* Mouseup */
function mouseup(e) {

if(started) {

started = false;

}

}

以上逻辑来 self 在没有使用 fabric.js 的情况下使用的一个简单的矩形绘图系统,所以我知道它可以工作,只是不适用于 fabric.js。

似乎数学不对,或者我使用宽度/高度/x/y 值设置了不正确的参数,因为当您绘制矩形时,它没有正确地跟随光标。

非常感谢任何帮助,提前致谢:)

最佳答案

我已经为你写了一个例子。请点击以下链接:

http://jsfiddle.net/a7mad24/aPLq5/

var canvas = new fabric.Canvas('canvas', { selection: false });

var rect, isDown, origX, origY;

canvas.on('mouse:down', function(o){
isDown = true;
var pointer = canvas.getPointer(o.e);
origX = pointer.x;
origY = pointer.y;
var pointer = canvas.getPointer(o.e);
rect = new fabric.Rect({
left: origX,
top: origY,
originX: 'left',
originY: 'top',
width: pointer.x-origX,
height: pointer.y-origY,
angle: 0,
fill: 'rgba(255,0,0,0.5)',
transparentCorners: false
});
canvas.add(rect);
});

canvas.on('mouse:move', function(o){
if (!isDown) return;
var pointer = canvas.getPointer(o.e);

if(origX>pointer.x){
rect.set({ left: Math.abs(pointer.x) });
}
if(origY>pointer.y){
rect.set({ top: Math.abs(pointer.y) });
}

rect.set({ width: Math.abs(origX - pointer.x) });
rect.set({ height: Math.abs(origY - pointer.y) });


canvas.renderAll();
});

canvas.on('mouse:up', function(o){
isDown = false;
});

关于javascript - Fabric.js - 自由绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417603/

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