gpt4 book ai didi

javascript - 如何使用 Fabric js 对 Canvas 上的每个对象使用 if isType() ?

转载 作者:行者123 更新时间:2023-12-03 04:39:15 24 4
gpt4 key购买 nike

我试图在 Canvas 上显示每个对象的某些属性,但我在编写代码时遇到了困难。例如。我希望下面的代码能够识别形状、文本和图像对象之间的差异,并根据类型显示属性。

console.log 的属性:

对于 Canvas 上的每个对象,检查是否 -

  • 图像,然后是 URL(来源)和比例 <= 我遇到了困难显示图像的来源和名称。
  • 文本,然后是字体系列、字体大小、颜色、比例
  • 形状、比例和颜色

我需要添加/删除/更改什么才能使其正常工作?

这是一个 JS fiddle 示例: https://jsbin.com/vevihikefo/1/edit?html,js,console,output

canvas.getObjects().forEach(object=>{
if(object.isType('xyz')) { // object is a shape
console.log(object.scaleX, object.fill);
} else if(object.isType('text')) { // object is a text
console.log(object.text, object.fontFamily, object.fontSize*3, object.scaleX, object.fill);
} else { // object is an image
console.log(object.name, object.scaleX, object.fill);
}
})

最佳答案

需要添加/更改两件事才能使其正常工作......

  • object.isType('xyz') 更改为 !object.isType('text') && !object.isType('image')      (因为没有任何类型称为“xyz”)
  • 将用于获取对象属性的整个代码封装在函数中,并在图像加载时调用该函数,以正确获取图像对象属性。

fabric.Object.prototype.objectCaching = false;
var canvas = new fabric.Canvas('canvas');
canvas.add(new fabric.Text('foo', {
fontFamily: 'Roboto',
left: 100,
top: 100,
fontSize: 25
}));
canvas.add(new fabric.Text('help', {
fontFamily: 'Roboto',
left: 100,
top: 200,
fontSize: 25
}));
canvas.add(new fabric.Triangle({
fill: 'green',
left: 200,
top: 200
}));
fabric.Image.fromURL('http://fabricjs.com/assets/pug_small.jpg', function(myImg) {
//i create an extra var for to change some image properties
var img1 = myImg.set({
left: 200,
top: 0,
width: 150,
height: 150
});
canvas.add(img1);
getAttributes();
});
canvas.renderAll();

function getAttributes() {
canvas.getObjects().forEach(object => {
if (!object.isType('text') && !object.isType('image')) { // object is a shape
console.log(object.scaleX, object.fill);
} else if (object.isType('text')) { // object is a text
console.log(object.text, object.fontFamily, object.fontSize * 3, object.scaleX, object.fill);
} else if (object.isType('image')) { // object is an image
console.log(object.name, object.scaleX, object.fill);
}
});
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="canvas" width="800" height="600" style="border: 1px solid #d3d3d3; position: absolute;">
Your browser does not support the canvas element.
</canvas>

关于javascript - 如何使用 Fabric js 对 Canvas 上的每个对象使用 if isType() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43152318/

24 4 0
文章推荐: javascript - 请求帮助 : setting up a grid using nested if loops (JavaScript)
文章推荐: javascript - 当使用Route render prop而不是Route component prop时,如何访问react-router-dom 4中的url参数?
文章推荐: javascript - 选择器内部的变量 - jQuery - 这很棘手
文章推荐: javascript - 使用 onchange 和 eventListener 创建