You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vis.js技术问题:如何避免双击节点后触发拖拽行为?

解决Vis.js双击节点后拖拽黏附的问题

这个问题是因为Vis.js双击节点时,原生鼠标事件的默认拖拽行为没被阻止,导致节点跟着光标移动。直接在双击事件回调里加一行代码就能解决:

在doubleClick处理函数开头添加params.event.preventDefault();,阻止原生事件的默认行为,就能避免触发拖拽。

修改后的代码如下:

// initialize the network!
network = new vis.Network(container, data, getOptions(networkLayout));
network.fit();

// add event listener for double click on node
network.on("doubleClick", function (params) {
    // 阻止默认拖拽行为
    params.event.preventDefault();
    
    // get the id of the clicked node
    var clickedNodeId = params.nodes[0];
    var nodesToUpdate = [];

    // get the adjacent nodes of the clicked node
    var adjacentNodes = network.getConnectedNodes(clickedNodeId);

    adjacentNodes.forEach(addAdjacentNodesToUpdate);
    function addAdjacentNodesToUpdate(nodeId, index) {
        nodesToUpdate.push({id: nodeId, hidden: false, physics: true});
    }
    nodes.update(nodesToUpdate);
    showHideEdges(nodesToUpdate);

});

如果上面的方法不生效,还可以试试临时禁用拖拽再恢复:

network.on("doubleClick", function (params) {
    // 临时禁用节点拖拽
    network.setOptions({ interaction: { dragNodes: false } });

    // 你的原有业务逻辑
    var clickedNodeId = params.nodes[0];
    // ... 省略原有代码

    // 异步恢复拖拽,避免阻塞事件循环
    setTimeout(() => {
        network.setOptions({ interaction: { dragNodes: true } });
    }, 0);
});

原理是双击瞬间禁用拖拽,让Vis.js不会触发拖拽逻辑,处理完业务后再恢复正常拖拽功能。

内容的提问来源于stack exchange,提问作者Maciejg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:20:22