angularjs - 使用 Canvas 和 AngularJS

标签 angularjs canvas html5-canvas

我正在执行一项任务,用 HTML5 重写以下 Flash 应用程序:

http://www.docircuits.com/circuit-editor

考虑到应用程序的复杂性和我迄今为止的研发,我已将 AngularJS 确定为实现的首选 MVC 框架。该应用程序有各种部分,例如面板、菜单、属性、图表等,我相信所有这些都可以在 AngularJS 中轻松实现。

然而,关键问题是组件设计和交互(例如拖/放、移动、线处理等)需要基于 Canvas,因为我已经能够导出所有矢量图形使用 CreateJS 工具包 ( http://www.adobe.com/in/products/flash/flash-to-html5.html ) 从 Flash 转换为 Canvas 库,而不是 SVG。

问题是“ Canvas 内的各个对象”和 AngularJS 之间没有明确的通信方式。我已经查看了以下示例,但几乎所有示例都适用于 Canvas 对象,而不是处理 Canvas 内的各个组件:

AngularJS Binding to WebGL / Canvas

Is there already a canvas drawing directive for AngularJS out there?

我有点被困在这里,不知道该怎么办。非常感谢以下方面的一些评论:

  • AngularJS 是否是正确的选择?

  • 我是否应该尝试在另一个库(例如 Fabric.js、kinect.js、Easel.js)中实现 Canvas 部分并将其与 Angular 集成(目前看来这又是一项艰巨的任务)?

  • 如果以上都不是,我应该切换到什么其他框架来轻松处理 Canvas 以及面板、菜单、图表等其他功能?

最佳答案

我们终于成功地将 AngularJS 和 HTML5 Canvas 一起使用。下面,我将简要分享我们的要求以及实现它所遵循的方法。

这个要求有点棘手,正如我们想要的:

  1. 处理 Canvas 内各个元素的事件句柄,并能够根据 AngularJS 中的数据动态添加这些元素

  2. 在 AngularJS 中保留每个元素的数据,同时使用 Canvas 仅显示数据。

  3. 在某些情况下使用 Controller 继承对数据进行特殊处理(例如,所有实例都应该是可移动和可拖动的,但某些实例可能需要闪烁或显示一些色带等)

    <

为了处理Canvas上的操作,我们将其分为两部分:

  1. Canvas 服务

    它的作用是

    • 初始化 Canvas

    • 在 Canvas 中添加或删除任何元素

    • 刷新 Canvas

  2. 实例指令和 Controller

    • Angular Controller 保留相应“ Canvas 元素”的句柄,以及与其关联的所有数据。

    • 每个元素上的事件监听器都会触发 Angular Controller 中操纵实例数据的特定函数

    • 指令监视 Controller 中的实例数据,并在 Canvas 服务的帮助下相应地更新 Canvas

对于 Controller 继承,我们发现以下方法非常有用: https://github.com/exratione/angularjs-controller-inheritance

这帮助我们动态创建 Controller ,并且在实例指令的帮助下,我们还可以处理 Canvas 上的单独更新以及通用事件处理。

我知道这种方法可能不完全面向 AngularJS,但它对我们来说效果很好,并且我们能够处理 AngularJS 和 HTML5 Canvas 之间的合理数量的交互。

关于angularjs - 使用 Canvas 和 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828688/

相关文章:

javascript - 使用 .scale() 调整 HTML Canvas 大小

javascript - 调整窗口大小后 Canvas 动画速度加快

javascript - 使用 HTML5 Canvas 的更高 DPI 图形

javascript - 带有嵌套重复的 Angular 显示/隐藏

javascript - Angular.js : Initializing a controller on an asynchronously loaded template?

javascript - 加载html后如何加载js文件

javascript - AngularJS GlobalCtrl vs $rootScope vs Service

javascript - 在 Javascript 中调用对象方法

javascript - JavaScript Canvas 中透明框后面的模糊

javascript - 滚动页面时如何禁用 Canvas 元素劫持鼠标滚轮?