【问题标题】:Make other nodes follow when dragging a node in Cytoscape.js在 Cytoscape.js 中拖动节点时使其他节点跟随
【发布时间】:2016-02-15 04:00:19
【问题描述】:

我是cytoscape.js的新手,我只是想让其他节点在拖动一个节点时跟随。

感谢您的帮助

【问题讨论】:

    标签: javascript graph cytoscape.js


    【解决方案1】:

    编写一个监听器,并在您的回调中适当地更新其他节点位置:

    【讨论】:

    • 感谢您的快速响应,我只是想让其他节点在拖动一个节点时自动跟随。
    【解决方案2】:

    这就是我的做法。请注意,您必须在抓取事件中保存原始位置,然后在拖动事件期间更新。

    function add_drag_listeners()
    {
        var all = cy.elements("node");
        for (j = 0; j < all.length; j++)
        {
            cynode = all[j];
            cynode.on("grab",handle_grab);
            cynode.on("drag",handle_drag);
        }
    }
    var grab_x = 0;
    var grab_y = 0;
    var drag_subgraph = [];
    function handle_grab(evt)
    {
        grab_x = this.position().x ;
        grab_y = this.position().y ;
        var succ = this.successors();
        drag_subgraph = [];
        var succstr = "";
        for (i = 0; i < succ.length; i++)
        {
            if (succ[i].isNode())
            {
                var old_x = succ[i].position().x;
                var old_y = succ[i].position().y;
                succstr += " " + succ[i].data("id");
                drag_subgraph.push({old_x:old_x, old_y:old_y, obj:succ[i]});
            }
        }
    }
    function handle_drag(evt)
    {
        var new_x = this.position().x;
        var new_y = this.position().y;
        var delta_x = new_x - grab_x;
        var delta_y = new_y - grab_y;
        for (i = 0; i < drag_subgraph.length; i++)
        {
            var obj = drag_subgraph[i].obj;
            var old_x = drag_subgraph[i].old_x;
            var old_y = drag_subgraph[i].old_y;
            var new_x = old_x + delta_x;
            var new_y = old_y + delta_y;
            obj.position({x:new_x, y:new_y});
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2015-11-13
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      相关资源
      最近更新 更多