antvis/G6

使用activate-relations,点击画布空白处之前节点定义的自定义状态消失? #5044

XiaoRIGE posted onGitHub

问题描述

activate-relations配置如下

{
          type: 'activate-relations',
          trigger: 'click',
          resetSelected: true,
},

页面通过某些操作会让画布里所有节点拥有状态nodeStatus:1、nodeStatus:2 这时候点击某节点,然后点击画布空白处,所有节点都会变为默认状态

重现链接

www.test.com

重现步骤

1.让所有节点拥有自定义状态nodeStatus:1或nodeStatus:2 2.点击其中某节点 3.点击画布空白处 4.所有节点恢复默认状态

预期行为

1.让所有节点拥有自定义状态nodeStatus:1或nodeStatus:2 2.点击其中某节点 3.点击画布空白处 4.节点恢复之前的nodeStatus:1或nodeStatus:2

平台

  • 操作系统: [macOS, Windows, Linux, React Native ...]
  • 网页浏览器: [Google Chrome, Safari, Firefox]
  • G6 版本: [4.5.1 ... ]

屏幕截图或视频(可选)

No response

补充说明(可选)

No response


Hi @XiaoRIGE, Please star this repo if you find it useful! Thanks :star:! 你好 @XiaoRIGE。如果该仓库对你有用,可以 star 一下,感谢你的 :star:!

posted by github-actions[bot] over 1 year ago

啊?不应该消失吗

posted by Yanyan-Wang over 1 year ago

能不能配置不消失呢?

posted by XiaoRIGE over 1 year ago

再来个 PR 加个配置项怎么样~?

posted by Yanyan-Wang over 1 year ago

相关代码是activate-relations中的throttleClearActiveState函数内吗?

posted by XiaoRIGE over 1 year ago
throttleClearActiveState: throttle(function (e, self) {
    var graph = self.get('graph');
    if (!graph || graph.destroyed) return;
    if (!self.shouldUpdate(e.item, {
      event: e,
      action: 'deactivate'
    }, self)) return;
    var activeState = self.activeState;
    var inactiveState = self.inactiveState;
    var activeItems = self.activeItems || {};
    var inactiveItems = self.inactiveItems || {};

    Object.values(activeItems).filter(function (item) {
      return !item.destroyed;
    }).forEach(function (item) {
      graph.clearItemStates(item, activeState);
    });
    Object.values(inactiveItems).filter(function (item) {
      return !item.destroyed;
    }).forEach(function (item) {
      graph.clearItemStates(item, inactiveState);
    });
    self.activeItems = {};
    self.inactiveItems = {};
    graph.emit('afteractivaterelations', {
      item: e.item || self.get('item'),
      action: 'deactivate'
    });
  }, 50, {
    trailing: true,
    leading: true
  })

有个疑惑,我发现代码里边只会清除节点的activeState和inactiveState,并没有清除自定义状态啊

posted by XiaoRIGE over 1 year ago

activeState 和 inactiveState 是变量,存储的是用户对这个交互配置的状态名

posted by Yanyan-Wang over 1 year ago

我发现是因为点击画布空白处的时候,节点的inactive会变为false,我的自定义节点在inactive值为false会将节点的透明度改为1,但是这个节点同时还拥有状态nodeStatus:1,它对应的样式是让节点透明度为0.4,我该如何再自定义节点的setState定义该优先级的处理呢?

posted by XiaoRIGE over 1 year ago

已解决,只需在setState中对应设置透明度的地方加上判断该节点是否已经包含优先级更高的某状态

posted by XiaoRIGE over 1 year ago

Fund this Issue

$0.00
Funded

Pull requests