Javascript d3.js-使用画布保持交互

Javascript d3.js-使用画布保持交互,javascript,canvas,svg,d3.js,Javascript,Canvas,Svg,D3.js,据我所知,d3.js用于SVG的主要部分,而不是HTML5的画布。SVG和Canvas的优缺点已经很清楚,并且已经讨论过了。现在我发现在d3.js中可以使用Canvas来代替或与SVG结合使用。主要原因应该是为大型数据集获得更好的性能(就像cubism.js为实时数据可视化所做的那样)。我的问题是:当我使用Canvas-over-SVG来获得更好的性能时,我还有交互的可能性吗?我知道Canvas本身允许操作,但它比SVG更难实现。因此,当我使用d3.js画布方法时,我可以保持SVG的交互吗?首先

据我所知,d3.js用于SVG的主要部分,而不是HTML5的画布。SVG和Canvas的优缺点已经很清楚,并且已经讨论过了。现在我发现在d3.js中可以使用Canvas来代替或与SVG结合使用。主要原因应该是为大型数据集获得更好的性能(就像cubism.js为实时数据可视化所做的那样)。我的问题是:当我使用Canvas-over-SVG来获得更好的性能时,我还有交互的可能性吗?我知道Canvas本身允许操作,但它比SVG更难实现。因此,当我使用d3.js画布方法时,我可以保持SVG的交互吗?

首先,d3本身不需要任何特定的渲染技术。对于是否使用HTML、SVG、Canvas或其他完全不同的方式进行渲染,人们大多(除了一些专业的助手)是不可知的

正如您所指出的,SVG和Canvas之间的主要区别之一是SVG具有“内置”交互,即它为事件监听器等提供了便利。画布没有这些

但是,您可以在画布中获得与SVG中相同的交互性。诀窍是使用Javascript监控用户对各种元素所做的操作。有关这方面的介绍,请参见例如

请注意,根据您确切想要的交互类型,可能需要大量的实现工作来实现SVG已经提供的功能。还要注意,这会导致性能下降,这可能会抵消Canvas优于SVG的一些好处