小编Vir*_*111的帖子

Fabric.js - 通过鼠标拖动创建折线形状不会将形状居中到其边界框

我正在创建一个带有(折线)工具的三角形,试图制作一个矩形三角形.一切都很好,但创建的三角形不在它的边界框内,这会导致事后的问题.我已经实现了它来创建一个多边形,多边形在它的边界框内居中,但应用相同的技术似乎不适用于折线三角形的情况.

显示不良影响的图像

这个jsFiddle显示出不需要的行为.

也许我必须改变'originX'和'originY',但我尝试了几种不同的组合,但没有解决:

const triangle = new fabric.Polyline(calcPoints(originX, originY, originX, originY), {
objectCaching: false,
left: originX,
top: originY,
originX: 'left',
originY: 'top',
fill: '#0000FF',
includeDefaultValues: false});
Run Code Online (Sandbox Code Playgroud)

我还在鼠标上使用newShape.setPositionByOrigin方法:

newShape.setPositionByOrigin(position, 'top', 'left'); 
Run Code Online (Sandbox Code Playgroud)

对于多边形情况,我还为形状应用了pathOffset,但这里导致事件更大的偏移量.

有没有办法修复放置在边界框中的形状?

问候!

fabricjs

7
推荐指数
1
解决办法
267
查看次数

在Fabric Js中具有自定义属性的自定义绘图工具

我正在尝试在Fabric Js的上下文中创建自定义绘图工具.通过自定义我的意思是应用于每个绘制的自由线自定义属性,例如:
1) - 创建对象的id;
2) - 谁创造了它;
3) - 何时创建
4) - 何时更新
5) - 等


对于画布中更容易的其他元素,例如Circle,Rectangle,Triangle
示例(typescript,Angular code):


export class Circle extends fabric.Circle implements ExtendedFabricOptions {
id: string;
createdBy: string;
editedBy: string;
createdOn: string;
updatedOn: string;

constructor(props: ICircleOptions) {
    super(props);
    this.id = props.id;
    this.createdBy = props.createdBy;
    this.editedBy = props.editedBy;
    this.createdOn = props.createdOn;
    this.updatedOn = props.updatedOn;
}
}
Run Code Online (Sandbox Code Playgroud)


并执行代码:

onMouseDown(e: fabric.IEvent) {
const mousedownPointer: fabric.ICoords2d = {
  x: e.pointer.x,
  y: e.pointer.y
};

const object: Circle = new Circle({ …
Run Code Online (Sandbox Code Playgroud)

fabricjs

6
推荐指数
1
解决办法
524
查看次数

在fabric.js 中绘制两个头箭头

我是 fabric.js 的新手,对浏览器画布 api 没有太多经验,所以我感谢有人提供的所有帮助。

实现的目标是在 3 种不同模式下使用鼠标箭头进行绘制:

  1. 带 2 个头
  2. 一头
  3. 完全没有头(只是一条普通的线)

有一个很好的例子——但只有一个“提示”。

还有一个更高级的主题可能是:在选择一个已经创建的箭头后,更改它(例如,单击一个按钮并将模式从一个箭头更改为两个)。

  _render: function(ctx) {
    this.callSuper('_render', ctx);

    // do not render if width/height are zeros or object is not visible
    if (this.width === 0 || this.height === 0 || !this.visible) return;

    ctx.save();

    var xDiff = this.x2 - this.x1;
    var yDiff = this.y2 - this.y1;
    var angle = Math.atan2(yDiff, xDiff);
    ctx.translate(xDiff / 2, yDiff / 2);
    ctx.rotate(angle);
    ctx.beginPath();
    //move 10px in front of line to start the arrow …
Run Code Online (Sandbox Code Playgroud)

fabricjs

6
推荐指数
1
解决办法
2366
查看次数

如何仅通过一个媒体源使用多个videogular2播放器

我有一个videogular2用于运行音频文件的angular 6应用程序。包含vg-player(父组件)的组件是ngSwitch语句的一部分,因此是?可以销毁的组件。

当视图更改时,我需要在后台运行音频。但是,当视图改变时,播放器的所有者将被破坏。

我无法更改这种复杂的开关逻辑,也无法隐藏组件。

我看到的唯一选项是在视图中显示播放器的控件(播放,暂停,音量和进度条),但播放器的源将放置在当前父项持有者组件之外。这样,当视图被破坏时,音频将保留在背景中。


因此,出现了一个确切的问题:我可以创建与媒体源同步的“模拟”控件吗?有一个单例服务为玩家提供整个沟通,但我想的主要问题是进度条。

  • 1-我可以只显示没有视频标签的播放器控件吗
<video id="singleVideo"
  [muted]="isMuted"
  preload="auto"
  [vgMedia]="media"
  playsinline>
  <source [src]="videoSrc" type="video/mp4">
</video>
Run Code Online (Sandbox Code Playgroud)
  • 2-如果可能,控件是否可以通过服务与源同步

总结:
-是否可以将多个不同的视图(仅保留播放器的控件)链接到一个源?
-将源放置在视图之外?
-要同步进度条吗?
-如果一个视图被破坏,剩下的视图将保留下来,并且从每个视图可以命令媒体播放器使用?
-在某些命令上要同步所有控件?

先感谢您!我认为这是非常合法的用例,值得观察。

videogular angular

6
推荐指数
0
解决办法
84
查看次数

Fabric Js requestRenderAll() 方法与 renderAll() 方法

使用新的 3.0.0 版 Fabric JS,我们必须应用requestRenderAll()才能在一个对象处于活动状态时查看句柄。
我的问题是:
确实requestRenderAll()取代了某种renderAll()方法。两种方法之间是否有任何重要区别。当我们必须使用它们中的每一个时,我们是否必须一起使用它们?

我现在认为Canvas.renderall是同步操作和requestRenderAll()方法被视为改进。但是我们是否还需要renderAll(),如果“是”,什么时候。而且 -renderAll()会在不久的将来被弃用吗?

fabricjs

5
推荐指数
0
解决办法
2466
查看次数

标签 统计

fabricjs ×4

angular ×1

videogular ×1