<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我是FE,也是Fe

    前端來源于不斷的點滴積累。我一直在努力。

    統計

    留言簿(15)

    閱讀排行榜

    評論排行榜

    基于raphaeljs的web圖實現-rgraph2

    xRelation by RGraph2

    RGraph2

    RGraph是一個基于Raphaeljs完整的點->線圖的web實現。

    online demo :RGraph2 Demo

    github地址 :

    git clone https://github.com/hafeyang/rgraph2.git
    

    RGraph2已經支持bower包規范,可以直接使用bower安裝

    bower install rgraph2
    

    由于Raphaeljs目前不支持bower規范,所以沒有引入Raphaeljs依賴

    RGraph包含特性:

    • 點->線圖布局算法(2.0新增)
    • 基本畫布拖拽
    • 點拖動,鼠標hover高亮相關點
    • 支持放大/縮小/鼠標滾輪事件
    • 提供API增/刪/改節點

    Quick Demo

    <script type="text/javascript" src="https://raw.github.com/hafeyang/rgraph2/master/lib/raphael-min.js"></script>
    <script type="text/javascript" src="https://raw.github.com/hafeyang/rgraph2/master/lib/rgraph2.js"></script>
    <script type="text/javascript">
    var graph = new RGraph("canvas");
    //加載數據
    graph.loadData({
    nodes:{
    //label:顯示文字,支持Raphael.fullfill格式。
    //rectStyle,textStyle 文本框的顏色,文字顏色
    "1":{"label":"{name}",name:"節點1",rectStyle:{fill:"#616130",stroke:"#616130"},textStyle:{fill:"#fff"}},
    "2":{"label":"節點2"}
    },
    edges:[
    //source,target 是節點的ID ,箭頭由source->target
    //arrowStyle,指定箭頭顏色
    {source:"1",target:"2",label:"1->2",arrowStyle:{fill:"#ab4",stroke:"#ab4"}}
    ]
    });
    //將ID為1的節點移至視口中央
    graph.center("1");
    </script>
    

    初始化參數

    var graph = new RGraph("canvas",opts);
    

    opts.drawNodeFn

    繪制節點的Raphaeljs擴展方法,默認為rgraphnode,RGraph2內部默認實現,自定義節點繪制方法為:

    (!Raphael.fn.rgraphnode ) && (Raphael.fn.rgraphnode=function(node){
    // your implementation
    return {
    //移動節點時會調用該方法
    move:function(dx,dy){},
    //高亮節點時會調用該方法
    highlight:function(){},
    //清除高亮
    unhighlight:function(){},
    //更新節點文本
    update:function(){}
    }
    });
    

    具體可以參見RGraph2內部實現

    opts.onnodeclick(e,node)

    節點節點觸發function,參數event,node

    opts.onnodemouseover(e,node)

    節點mouseover觸發function,參數event,node

    opts.onnodemouseout(e,node)

    節點mouseout觸發function,參數event,node

    opts.nnodestartdrag(e,node)

    節點開始拖拽觸發function,參數event,node

    opts.onnodedragging(e,node)

    節點拖拽中觸發function,參數event,node

    opts.onnodeenddrag(e,node)

    節點拖拽結束觸發function,參數event,node

    API

    調用方法:graphInstance.method()
    

    instance.removeNode(nodeId)

    刪除節點以及節點相關的線

    instance.updateNode(nodeId)

    更新節點文本

    var node = graphInstance.getNode("nodeId");
    node.label = "{name} after update";
    graphInstance.updateNode(node.nodeId);
    

    instance.getNode(nodeId)

    根據節點ID獲取節點對象

    instance.addNode(node)

    添加節點,節點必須有nodeId,label屬性,rectStyle用于定義節點邊框樣式,樣式格式詳見Raphaeljs Element.attrtextStyle定義文字樣式。

    新增文字節點位置視口內隨機。

    graphInstance.addNode({nodeId:"nodeId---",label:"{nodename}",nodename:"Name"});
    

    instance.existEdge(sourceNodeId,targetNodeId)

    是否存在sourceNode與targetNode之間的線,如果有返回該Edge對象,否則返回false

    instance.addEdge(edge)

    添加一條線,edge必須有source,target屬性箭頭由source->target,label屬性定義箭頭上的label文字。arrowStyle定義箭頭的顏色樣式,格式以及可以設置的屬性參見 Raphaeljs Element.attr

    instance.loadData(graphData)

    加載圖數據,數據格式見demo

    instance.relayout()

    重新布局點->線位置

    instance.getNodeEdges(nodeId)

    根據nodeId獲取節點相關的邊

    instane.reset()

    方法倍數設置成1。視口還原。

    instance.center(nodeId)

    將nodeId節點移至視口中央

    References

    Raphaeljs

    Graph JavaScript framework

    Graph visualization code in javascript

    JavaScript Graph Library Showcase

    Knows Issues

    Raphaeljs Element.getBBox方法在IE<9下獲取值不正確導致IE9下不能兼容


    Thanks,any questions ,contact me freely!

    posted on 2012-12-11 20:08 衡鋒 閱讀(4469) 評論(12)  編輯  收藏 所屬分類: javascriptWeb開發

    評論

    # re: 基于raphaeljs的web圖實現-rgraph2[未登錄] 2014-05-29 14:53 chris

    您好,我想問下,如果我想要兩個節點之間有兩條連線而已不重合,應該怎么辦?  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-05-29 17:55 衡鋒

    @chris
    估計要在兩個店之間找兩個不同關鍵點,然后分別連線就不會重合吧。  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2[未登錄] 2014-06-12 11:15 chris

    @衡鋒
    多謝您!還有就是您這個畫布放大然后可以拖拽畫布是怎么實現的呢?  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-12 12:33 衡鋒

    @chris
    可以看看rgraph2的源碼。  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2[未登錄] 2014-06-12 17:49 chris

    @衡鋒
    但是有一點不明白。您的這個getViewBox獲取的是什么數據?  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-13 12:35 衡鋒

    @chris
    獲取的是當前視口在整個圖中的左上角偏差和寬高  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2[未登錄] 2014-06-24 14:54 chris

    又來打擾您了。我按您的方法嘗試了拖動整個canvas,但是如果連續拖動的話會飄的很,您有什么方法解決嗎  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-24 16:41 衡鋒

    @chris
    這個時能用類似underscore里面的bounce或者throttle來解決了。  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-25 16:08 TIMI

    請教下,我要是添加圖片該怎么添加呢?我用src不管用呀!  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-25 16:51 TIMI

    在您rgraph2中添加節點,要是想添加圖片改怎么添加呢?我試了src屬性沒有效果。  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2 2014-06-27 12:29 衡鋒

    @TIMI
    看Raphaeljs的文檔  回復  更多評論   

    # re: 基于raphaeljs的web圖實現-rgraph2[未登錄] 2015-08-03 18:53 aa

    刪除節點不好用  回復  更多評論   

    主站蜘蛛池模板: 一级毛片正片免费视频手机看| 亚洲精品无码永久在线观看男男| 亚洲电影在线播放| 亚洲av午夜精品无码专区| 亚洲6080yy久久无码产自国产| 一本到卡二卡三卡免费高| 久久精品免费观看国产| 在线视频免费观看高清| 免费一级做a爰片久久毛片潮喷| 自拍偷自拍亚洲精品情侣| 亚洲精品综合久久中文字幕| 亚洲精品无码不卡在线播放| 黄色毛片免费观看| 久操视频免费观看| 在线观看免费大黄网站| 久久亚洲2019中文字幕| 久久久久亚洲Av无码专| 久久精品国产亚洲av天美18| 十八禁视频在线观看免费无码无遮挡骂过 | 久久精品亚洲男人的天堂| 亚洲毛片在线观看| 亚洲高清国产拍精品熟女| 91成人免费福利网站在线| 999国内精品永久免费观看| 日产国产精品亚洲系列| 蜜芽亚洲av无码精品色午夜| 久久精品亚洲日本波多野结衣 | 午夜爽爽爽男女免费观看影院| 女人18毛片a级毛片免费视频| 亚洲一区二区三区在线观看精品中文 | 无人影院手机版在线观看免费| 亚洲国产精品激情在线观看| 亚洲精品国产手机| 又硬又粗又长又爽免费看 | 亚洲视频一区二区在线观看| 免费精品国自产拍在线播放| 2019中文字幕在线电影免费 | 在线精品免费视频无码的| 久久亚洲中文字幕精品一区四| 亚洲AV成人一区二区三区在线看| 国产又黄又爽又大的免费视频 |