vis.js開發詳解

一、vis.js官網

vis.js是一個基於HTML5 Canvas的可視化工具庫,可以用於可視化網路、流程圖、拓撲圖等各種類型的關係數據。

使用vis.js需要引入官方提供的vis-network.js腳本和vis-network.min.css樣式表。

下面是vis.js官網提供的一個簡單示例:

    <!doctype html>
    <html>
    <head>
        <title>Basic Example Network</title>
        <script type="text/javascript" src="vis-network.js"></script>
        <link rel="stylesheet" href="vis-network.min.css" type="text/css" />
        <style type="text/css">
            #mynetwork {
                width: 600px;
                height: 400px;
                border: 1px solid lightgray;
            }
        </style>
    </head>
    <body>
        <div id="mynetwork"></div>
        <script type="text/javascript">
            var nodes = new vis.DataSet([
                { id: 1, label: "Node 1" },
                { id: 2, label: "Node 2" },
                { id: 3, label: "Node 3" },
                { id: 4, label: "Node 4" },
                { id: 5, label: "Node 5" }
            ]);
            var edges = new vis.DataSet([
                { from: 1, to: 2 },
                { from: 1, to: 3 },
                { from: 2, to: 4 },
                { from: 2, to: 5 }
            ]);
            var container = document.getElementById('mynetwork');
            var data = {
                nodes: nodes,
                edges: edges
            };
            var options = {};
            var network = new vis.Network(container, data, options);
        </script>
    </body>
    </html>

二、vis.js拓撲圖新增連線

在vis.js拓撲圖中,通過添加edges數組中的數據來表示拓撲圖的連線,而新增一條連線需要在edges數組中添加一條新的數據,並通過調用network.setData()方法來重新載入數據。下面是一個示例:

    var edges = new vis.DataSet([
        {from: 1, to: 2},
        {from: 2, to: 3},
        {from: 3, to: 1}
    ]);

    function addEdge() {
        edges.add({
            from: 4,
            to: 5
        });
        network.setData({edges: edges});
    }

三、vis.js文檔

vis.js官網提供了完善的API參考文檔和示例代碼,可以滿足大部分使用需求。同時,vis.js還提供了在線互動式示例,可以直接在瀏覽器中測試可視化效果。由於文檔較為詳細,這裡不再贅述。

四、vis.js拓撲圖

vis.js拓撲圖是一種可以用來展示帶有關係的節點之間的圖形結構的數據結構。在vis.js拓撲圖中,需要先定義nodes數組來表示節點信息,然後通過edges數組來表示節點之間的關係。

下面是一個簡單的vis.js拓撲圖示例:

    var nodes = new vis.DataSet([
        {id: 1, label: 'Node 1'},
        {id: 2, label: 'Node 2'},
        {id: 3, label: 'Node 3'},
        {id: 4, label: 'Node 4'},
        {id: 5, label: 'Node 5'}
    ]);
    var edges = new vis.DataSet([
        {from: 1, to: 2},
        {from: 1, to: 3},
        {from: 2, to: 4},
        {from: 2, to: 5}
    ]);
    var data = {
        nodes: nodes,
        edges: edges
    };
    var options = {};
    var container = document.getElementById('myvis');
    var network = new vis.Network(container, data, options);

五、vis.js卡頓

在vis.js中,當節點數量過多時可能會出現卡頓的情況。這個時候可以通過下面幾種方法來優化性能:

1、使用Web Worker:vis.js提供了這個功能,它可以讓vis.js的計算過程在後台線程中進行,不會影響其他的頁面渲染。

2、用力布局:

    var options = {
        layout: {
            hierarchical: {
                direction: 'UD'
            }
        }
    };

這個示例中,我們將拓撲圖布局方式改為上下布局,從而減輕了節點重疊的問題。

六、vis.js節點搜索

vis.js提供了一個用於搜索節點的API方法:searchNodes(query, [style]).

其中,query是搜索的關鍵詞,style用於指定搜索結果的呈現樣式,如果style參數被省略,則搜索結果默認以一個紅色的「繭形」呈現。

    function findNode() {
        var searchQuery = document.getElementById("search-box").value;
        var nodes = new vis.DataView(network, {filter: function (item) {return item.group !== 'hidden';}});
        var searchResult = nodes.get({
            fields: ['id', 'label'],
            filter: function (item) {
                return item.label.indexOf(searchQuery) !== -1;
            }
        });
        var style = [{borderWidth: 2, color: {background:'red'}}];
        network.selectNodes([searchResult[0].id]);
        network.focus(searchResult[0].id, {animation: true, scale: 1.0, locked: true});
        network.setSelection(searchResult[0].id, { nodes: style, edges: style });
    }

七、vis.js 畫地圖

vis.js提供了一個名為GeoLayout的布局,它能夠將節點以地圖的形式展現出來,從而便於展示全球範圍內的節點關係。下面是一個使用GeoLayout的vis.js示例:

    var data = {
        nodes: new vis.DataSet([
            {id: 1, label: 'New York', group: 1, lat: 40.71, lng: -74.00},
            {id: 2, label: 'London', group: 1, lat: 51.50, lng: -0.12},
            {id: 3, label: 'Tokyo', group: 2, lat: 35.69, lng: 139.69},
            {id: 4, label: 'Shanghai', group: 2, lat: 31.23, lng: 121.47},
            {id: 5, label: 'Beijing', group: 2, lat: 39.92, lng: 116.38}
        ]),
        edges: new vis.DataSet([
            {from: 1, to: 2},
            {from: 2, to: 3},
            {from: 2, to: 4},
            {from: 2, to: 5}
        ])
    };

    var options = {
        layout: {
            randomSeed: 2,
            improvedLayout: true,
            hierarchical: {
                enabled:false
            },
            geoLayout:{
                minSmoothness: 0.65
            }
        },
        groups: {
            1:{color:{background:'white', border:'black'}}
        },
        physics:{
            stabilization: {iterations: 2500},
            barnesHut: {gravitationalConstant: -2000}
        }
    };

    var network = new vis.Network(container, data, options);

八、vis.js如何修改為中文

在vis.js官網提供的vis-network.min.css中,可以找到下面的內容:

    .vis-network:hover {
        cursor: pointer;
    }
    .vis-network {
        height: 100%;
        width: 100%;
        position: relative;
        overflow: hidden;
        border-style: solid;
        border-color: lightgray;
    }
    .vis-tooltip {
        position: absolute;
        padding: 6px 12px;
        z-index: 10;
        visibility: hidden;
        border-style: solid;
        border-width: 2px;
        border-radius: 5px;
        border-color: #666;
        background-color: #fff;
        text-align: left;
        font-size: 14px;
        line-height: 16px;
    }

從上面的代碼中,可以看出vis.js中的一些字元串(如vis-tooltip)是用來展示提示信息的。如果希望更改vis.js的默認語言,可以把這些字元串替換為中文,從而實現界面的漢化。下面是vis.js中一些常用字元串的中文翻譯:

    .vis-network:hover {
        cursor: pointer;
    }
    .vis-network {
        height: 100%;
        width: 100%;
        position: relative;
        overflow: hidden;
        border-style: solid;
        border-color: lightgray;
    }
    .vis-tooltip {
        position: absolute;
        padding: 6px 12px;
        z-index: 10;
        visibility: hidden;
        border-style: solid;
        border-width: 2px;
        border-radius: 5px;
        border-color: #666;
        background-color: #fff;
        text-align: left;
        font-size: 14px;
        line-height: 16px;
    }
    /* 漢化後的字元串 */
    .vis-network:hover {
        cursor: pointer;
    }
    .vis-network {
        height: 100%;
        width: 100%;
        position: relative;
        overflow: hidden;
        border-style: solid;
        border-color: lightgray;
    }
    .vis-tooltip {
        position: absolute;
        padding: 6px 12px;
        z-index: 10;
        visibility: hidden;
        border-style: solid;
        border-width: 2px;
        border-radius: 5px;
        border-color: #666;
        background-color: #fff;
        text-align: left;
        font-size: 14px;
        line-height: 16px;
    }
    /* 漢化後的提示信息 */
    .vis-tooltip {
        position: absolute;
        padding: 6px 12px;
        z-index: 10;
        visibility: hidden;
        border-style: solid;
        border-width: 2px;
        border-radius: 5px;
        border-color: #666;
        background-color: #fff;
        text-align: left;
        font-size: 14px;
        line-height: 16px;
    }

九、vis.js網路拓撲圖節點坐標

vis.js網路拓撲圖節點的坐標問題有時會成為許多開發者的困擾。通常情況下,vis.js的節點位置是由布局引擎自動計算得出的。當我們嘗試改變節點位置時,可能會遇到位置自動重置的問題。下面是解決vis.js節點坐標問題的一些技巧:

1、鎖定節點位置

    var nodes = new vis.DataSet([
        {id: 1, label: 'Node 1', x: 100, y: 100, fixed: true},
        {id: 2, label: 'Node 2', x: 300, y: 100, fixed: true},
        {id: 3, label: 'Node 3', x: 200, y: 200}
    ]);

2、關閉布局計算

    var options = {
        layout: {
            hierarchical: {
                enabled: false
            }
        },
        physics: {
            enabled: false
        }
    };

3、手動計算節點位置

function updatePosition() {
var node1 = network.getPositions([1])[1];
var node2 = network.getPositions([2])[2];
var x = (node1.x + node2.x) / 2

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/155282.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-17 02:38
下一篇 2024-11-17 02:38

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27
  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25

發表回復

登錄後才能評論