javascript - VivagraphJS、WebGL 和事件监听器

标签 javascript jquery webgl vivagraphjs

我绝对喜欢Vivagraph JS 。话虽如此,我遇到了一个难题,这可能是 WebGL 特有的。

我正在尝试:

  var graph = Viva.Graph.graph();

  var layout = Viva.Graph.Layout.forceDirected(graph, {
    springLength : 30,
    springCoeff : 0.0003,
    dragCoeff : 0.005,
    gravity : -0.2,
    theta: 0.8
  });

  var graphics = Viva.Graph.View.webglGraphics();
  graphics.node( function( node )
  { 
    node.addEventListener( 'click', function ()
    { 
      console.log( 'clicked node: ' + node.id ); 
    });

    return Viva.Graph.View.webglSquare( 10, color );
  });

  var renderer = Viva.Graph.View.renderer( graph,
  { 
    container  : document.getElementById( 'graph' ),
    graphics : graphics, 
    layout: layout 
  });

  renderer.run();

我见过类似的示例,但使用了 SVG。 使用 WebGL 似乎不起作用:

Uncaught TypeError: Object [object Object] has no method 'addEventListener' 

如何将来自 javascript/jquery 的事件监听器添加到构成节点的 webgl 粒子?

或者我应该为了我的意图和目的而完全放弃 WebGL?

最佳答案

WebGL 通常没有内置的事件支持。 VivaGraph 在其之上提供了一个包装器,让您可以监听事件。我对其实现并不满意,但它确实有效:

var events = Viva.Graph.webglInputEvents(webGLGraphics, graph);

events.mouseEnter(function (node) {
    console.log('Mouse entered node: ' + node.id);
}).mouseLeave(function (node) {
    console.log('Mouse left node: ' + node.id);
}).dblClick(function (node) {
    console.log('Double click on node: ' + node.id);
}).click(function (node) {
    console.log('Single click on node: ' + node.id);
});

您还可以查看WebGL Input完整示例演示。

关于javascript - VivagraphJS、WebGL 和事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21201554/

相关文章:

javascript - 有人在 Firefox 3.6.3 中获得零高度选择字段吗?

javascript - D3 4.0 有向边和标签的图

javascript - 逐渐增加不透明度

javascript - Three.js - 一个顶点着色器,根据屏幕上像素的位置进行着色

javascript - webGL 忽略背面?

android - Three.js 可以在没有某些 WebGL 扩展的情况下准确呈现吗?

javascript - 重定向除少数特定页面之外的所有页面

javascript - Jquery 将函数传递给函数

javascript - 如何为所有浏览器创建自己的打印预览选项

javascript - Safari 和 Chrome 上的 window.location.href