【问题标题】:How to animate a deletion in GoJS when removing node data?删除节点数据时如何在 GoJS 中为删除设置动画?
【发布时间】:2020-01-06 20:31:07
【问题描述】:

我正在尝试动画删除图表中的节点

我正在使用 GoJS 文档中的这段代码: https://gojs.net/latest/intro/animation.html

myDiagram.addDiagramListener('SelectionDeleting', function(e) {
  // the DiagramEvent.subject is the collection of Parts about to be deleted
  e.subject.each(function(part) {
    if (!(part instanceof go.Node)) return; // only animate Nodes
    var animation = new go.Animation();
    var deletePart = part.copy();
    animation.add(deletePart, "scale", deletePart.scale, 0.01);
    animation.add(deletePart, "angle", deletePart.angle, 360);
    animation.addTemporaryPart(deletePart, myDiagram);
    animation.start();
  });
});

要删除我正在使用myDiagram.model.removeNodeData(node) 的节点,但这不会触发事件。如果我使用Del 键手动删除节点,它可以工作。

使用代码删除节点时如何触发事件,例如使用myDiagram.model.removeNodeData(node)时?

【问题讨论】:

    标签: javascript gojs


    【解决方案1】:

    你说得对,myDiagram.model.removeNodeData(node) 不会调用该事件。所以你需要调用myDiagram.model.removeNodeData(node)的代码来调用与事件相同的代码。

    所以把代码取出来,放到自己的函数中,更一般的用途:

    function animateDeletion(part) {
      if (!(part instanceof go.Node)) return; // only animate Nodes
      var animation = new go.Animation();
      var deletePart = part.copy();
      animation.add(deletePart, "scale", deletePart.scale, 0.01);
      animation.add(deletePart, "angle", deletePart.angle, 360);
      animation.addTemporaryPart(deletePart, myDiagram);
      animation.start();
    }
    
    myDiagram.addDiagramListener('SelectionDeleting', function(e) {
      // the DiagramEvent.subject is the collection of Parts about to be deleted
      e.subject.each(function(part) {
        animateDeletion(part);
      });
    });
    

    然后您可以在调用 removeNodeData 之前调用相同的代码:

      // ... elsewhere...
      animateDeletion(node);
      myDiagram.model.removeNodeData(node.data);
    

    【讨论】:

    • 谢谢,我使用myDiagram.model.findNodeDataForKey('foo') 方法来获取节点,但它返回一个 ObjectData 而不是 Node 对象。 if (!(part instanceof go.Node)) return; 正在停止该功能。但我使用myDiagram.nodes 让它工作并搜索我想删除的节点。
    • 您可以随时使用myDiagram.findNodeForKey('foo') 来获取节点:gojs.net/latest/api/symbols/Diagram.html#findNodeForKey
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多