【问题标题】:D3 updating DOM, but nothing is showingD3 更新 DOM,但没有显示
【发布时间】:2016-11-16 11:16:28
【问题描述】:

我正在构建一个力导向图,据我所知,我已经正确编写了代码。这段代码运行后,DOM 看起来完全正确。然而,什么都没有显示。

var type_node_list = typeNodes(data);
shuffle(type_node_list);
initializePosition(type_node_list);

var links = typeLinks(type_node_list);

var svg = d3.select('#root');

var link = svg
    .append('g')
    .attr('id', 'links')
    .selectAll('line')
    .data(links)
    .enter()
    .append('line')
    .attr('class', 'link');

var type_nodes = svg
    .append('g')
    .attr('id', 'nodes')
    .selectAll('.node')
    .data(type_node_list)
    .enter()
    .append(createTypeNode);

function updateTypeNodeLocations() {
    link
        .attr("x1", function(d){return d.source.x;})
        .attr("y1", function(d){return d.source.y;})
        .attr("x2", function(d){return d.target.x;})
        .attr("y2", function(d){return d.target.y;});

    type_nodes
        .attr('x', nodeX)
        .attr('y', nodeY);
}
updateTypeNodeLocations();
/*
var position_the_types = d3.forceSimulation()
  .nodes( type_node_list )
  .force("charge",d3.forceManyBody().strength(-10))
  ;
position_the_types.on('tick',updateTypeNodeLocations());
*/

模拟部分被注释掉,因为我试图让第一部分工作。当我取消注释它时,它只调用一次“滴答”事件,即使处理显然没有完成。而且 JavaScript 控制台中也没有什么可以解释的。

完整代码见http://jsfiddle.net/jarrowwx/gof5knaj/36/

今天早上我有一些工作,但发生了一些变化,现在我做的任何事情似乎都没有工作。我查了 D3 github,最后一次提交好像是 11 天前,所以不太可能是库的变化造成的。

以前有没有人经历过这样的事情?关于我做错了什么的任何指示?我发现了 D3 错误吗?

【问题讨论】:

  • 当我运行小提琴时,我看到很多带有形状的彩色圆圈。我应该看到别的东西吗?
  • 当调用position_the_types.on('tick',updateTypeNodeLocations()); 时,您实际上将函数updateTypeNodeLocations 的返回值作为回调传递,这不是您想要的。您只需将引用传递给函数而不是调用它:position_the_types.on('tick',updateTypeNodeLocations); 不带内括号。如果是这样,甚至可能值得考虑完全删除这个问题。
  • @altocumulus,关于无关的括号,您是对的。哦!这解决了蜱虫问题。但即使在修复之后,我仍然什么也看不到。
  • @RobertLongson:左边应该有一行彩色圆圈,然后到处都是随机的彩色圆圈。你看到随机的吗?

标签: javascript d3.js d3-force-directed


【解决方案1】:

问题在于我的函数createTypeNode

我通过:document.createElement('image') 创建了图像元素。那是行不通的。要通过 JavaScript 创建图像,必须使用命名空间。

见:Programmatically creating an SVG image element with javascript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2021-10-06
    • 2018-04-23
    • 1970-01-01
    • 2021-05-09
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多