在 Fabric.js 画布上集成 Flash 动画(或派生格式)

Posted

技术标签:

【中文标题】在 Fabric.js 画布上集成 Flash 动画(或派生格式)【英文标题】:Integrate Flash animation (or derived format) on Fabric.js canvas 【发布时间】:2017-05-17 09:36:39 【问题描述】:

我有一个带有透明背景的动画和一个 html 画布。

在将对象添加到画布之前,应该播放动画。

动画源是一个 Flash 文件,还有一个 HTML/JS (CreateJS) 导出和一个可用的动画 GIF。

画布使用在 React 应用程序中运行的 Fabric.js。

我的问题如下:

在所述用例中实现动画的推荐方法是什么?

目前我最好的方法是尝试将 CreateJS 导出集成到 React 应用程序中,并在播放动画时将 Fabric.JS 画布与 CreateJS 画布“覆盖”。这个解决方案可以工作,对我来说听起来既复杂又臃肿,因为我将集成另一个画布库(除了 Fabric.js 之外的 CreateJS),并且两者都需要在时间/正确播放动画方面同步。

这是一个类似的未回答问题Animated GIF on Fabric.js Canvas

【问题讨论】:

你可以试试shumway:github.com/mozilla/shumway 我已经回答了你链接的问题,所以这会给你一个解决方法:将你的动画转换为 gif,然后解析这个 gif 的所有帧并创建它的精灵表。您还可以使用 createjs 画布,并在 rAF 循环中将其绘制在您的 fabricjs 上。但是没有办法直接在画布上绘制flash内容。所以一个最终的解决方案是使用 DOM 操作和 CSS 将嵌入的内容覆盖在画布上。 @Kaiido “rAF 循环”是什么意思,你能举个例子吗? fabric.js sprite 类可以在这里找到fabricjs.com/animated-sprite 【参考方案1】:

我只知道一种使用 fabric.js 添加图像的方法。首先在页面加载时加载图像,然后将它们显示在画布上。但是根据我的经验,fabric.js 在每个元素上都设置了很多功能,所以如果你想同时显示数千张图片,就很难加载。

var canvas = new fabric.Canvas('c');
var imgElement = document.getElementById('my-image');
var imgInstance = new fabric.Image(imgElement, 
  left: 100,
  top: 100,
  angle: 30,
  opacity: 0.85
);
canvas.add(imgInstance);

【讨论】:

您确认可以通过这种方式加载和显示动画 gif 吗? ***.com/a/41559440/1744768 声明对于动画 gif,画布上只会显示 1 帧

以上是关于在 Fabric.js 画布上集成 Flash 动画(或派生格式)的主要内容,如果未能解决你的问题,请参考以下文章

Fabric.js 将画布(或对象组)剪辑到多边形

使用 fabric.js 在画布上绘制文本

前端开发Vue + Fabric.js + Element-plus 实现简易的H5可视化图片编辑器

Fabric.js 3个api设置画布宽高

fabric.js 调整画布大小以适应屏幕

我们在 Fabric.js 中有画布修改事件吗?