假设我有一个html5/canvas应用程序,我可以在其中将对象放置在绘图画布上。某种图表编辑器,类似Visio(但更简单)找出在html5 Canvas上点击了哪个对象
是否有框架帮助我找到哪个对象被点击/拖拽?
一种选择是捕捉到的点击事件,并遍历所有的对象(在一个半智能的方式),并检查它是否点击/ draged,但我不想推倒重来:)
假设我有一个html5/canvas应用程序,我可以在其中将对象放置在绘图画布上。某种图表编辑器,类似Visio(但更简单)找出在html5 Canvas上点击了哪个对象
是否有框架帮助我找到哪个对象被点击/拖拽?
一种选择是捕捉到的点击事件,并遍历所有的对象(在一个半智能的方式),并检查它是否点击/ draged,但我不想推倒重来:)
不幸的是,没有对象渲染到画布中的对象模型。您需要跟踪所绘制的所有内容,并在检测到点击,鼠标移动,拖动,拖动时触发单独的事件。这意味着要为所有上下文方法创建一个包装,将行/图像及其属性存储到COM(Canvas Object Model :)中,并为每个行/图像触发事件。那就是它。这可以是一个lot的工作,我已经采取了编写自定义代码,每次我需要添加交互到画布
对于Visio样式的应用程序或任何与绘制对象的交互性是重要的,用SVG重新打好。已经有some open source projects,您可以使用它作为起点。 SVG的问题在于,与任何DOM重的东西一样,一旦有大量对象需要操作,性能就会急剧下降。
简短的版本是Canvas本身没有跟踪任何。
如果您不想重新发明轮子,请从本教程的示例代码开始"Making and Moving Selectable Shapes on an HTML5 Canvas: A Simple Example."它为点击和拖动提供了一个很好的介绍和平台。
KineticJS是你的朋友:http://www.kineticjs.com
看看如何轻松是这样的:http://www.html5canvastutorials.com/kineticjs/html5-canvas-drag-and-drop-tutorial/
什么是 '大量'? 100? 10.000? – Dribbel 2010-10-20 18:42:59
当使用excanvas绘制超过10,000点的积分时,我会表现呆滞 – 2010-10-20 20:53:19
@Dribbel如果您的目标是具有现代浏览器的桌面,则超过10,000,如果您使用手机,则可能会更加类似,这取决于浏览器和计算机规格1000,如果你想用VML在IE中工作,也许有几百个。 – robertc 2010-10-20 21:46:23