gpt4 book ai didi

javascript - 实时测量画线 fabric.js

转载 作者:行者123 更新时间:2023-11-30 12:33:44 33 4
gpt4 key购买 nike

我在 Fabric.Js 中用测量画线时遇到这个问题。

当我拖动线时,它必须在线的末端或中间显示变化的测量值。

我现在可以测量线的长度,但显示的测量结果有误。谢谢。

这是 fiddle 链接:https://jsfiddle.net/ydtt94zm/

$(function(){
var line, isDown;
var arr = new Array();
var startx = new Array();
var endx = new Array();
var starty = new Array();
var endy = new Array();
var temp = 0;
var graphtype; trigger = "1";

var canvas = this.__canvas = new fabric.Canvas('canvas', { hoverCursor: 'pointer',selection: false});
fabric.Object.prototype.transparentCorners = false;

canvas.on('mouse:down', function(o){
if(trigger=="1"){
isDown = true;
var pointer = canvas.getPointer(o.e);

var points = [pointer.x, pointer.y, pointer.x, pointer.y];
startx[temp] = pointer.x;
starty[temp] = pointer.y;
line = new fabric.Line(points, {
strokeWidth: 2,
stroke: 'red',
originX: 'center',
originY: 'center'
});
canvas.add(line);
}else{
canvas.forEachObject(function(o){
o.setCoords();

});
}
});

canvas.on('mouse:move', function(o){
if (!isDown) return;
var pointer = canvas.getPointer(o.e);
line.set({ x2: pointer.x, y2: pointer.y });

endx[temp] = pointer.x;
endy[temp] = pointer.y;

if(trigger=="1"){
var px = Calculate.lineLength(startx[temp], starty[temp], endx[temp], endy[temp]).toFixed(2);
var text = new fabric.Text('Length ' + px, { left: endx[temp], top: endy[temp], fontSize: 12 });

canvas.add(text);
if(canvas.getActiveObject().get('type')==="text")
{
canvas.remove(text);
}
}

canvas.renderAll();
});


canvas.on('mouse:up', function(o){
var pointer = canvas.getPointer(o.e);
isDown = false;

});

canvas.on('mouse:over', function(e) {
e.target.setStroke('blue');
canvas.renderAll();
});

canvas.on('mouse:out', function(e) {
e.target.setStroke('red');
canvas.renderAll();
});

$("#selec").click(function(){
if(trigger == "1"){
trigger = "0";
}else{
trigger = "1";
}
});

var Calculate={
lineLength:function(x1, y1, x2,y2){//线长
//console.log(x1 + ", "+ y1 +", " + x2 + ", " + y2);
//clearRect(x2, y2);
return Math.sqrt(Math.pow(x2*1-x1*1, 2)+Math.pow(y2*1-y1*1, 2));
}
}


});

最佳答案

您需要先删除文本元素,然后再重新添加它。

canvas.remove(text);

检查这个更新 fiddler

关于javascript - 实时测量画线 fabric.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771308/

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