我是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 衡鋒 閱讀(4477) 評論(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

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

          主站蜘蛛池模板: 德江县| 阜新| 汤原县| 新津县| 溆浦县| 平阳县| 呈贡县| 克山县| 县级市| 嘉祥县| 双桥区| 军事| 封开县| 台中市| 定州市| 宜春市| 慈溪市| 遵化市| 印江| 巫山县| 安仁县| 巩义市| 敦煌市| 邻水| 逊克县| 康定县| 武川县| 达尔| 平邑县| 定兴县| 湘潭县| 贵溪市| 昌宁县| 右玉县| 金塔县| 平顺县| 五大连池市| 固始县| 尼勒克县| 汝南县| 江川县|