给echarts力导向布局图增加滚动条。

连线点击事件/样式/标注文字及源代码。今天介绍一下怎么给echarts力导向布局图增加滚动条。

全部的demo代码下载:http://pan.baidu.com/s/1jGzEb6u

预览界面:http://www.suchso.com/code/KFdemo/force.html


echarts力导向布局图是没有滚动条功能的。力导向布局图的本意不是做人物关系图,所以当作人物关系图使用的时候,

就会出现问题。数据太多,就会罩住了。所以考虑增加个滚动条。

思路:

如果只是在html中增加滚动条是完全没问题。但是echarts是基于zrender,zrender是基于html5的。html5的canvas是没有滚动条选项的。

需要自己给他计算滚动条。

1、提供是否展示滚动条的选项:isShowScrollBar

2、根据参数构建滚动条:   if(option.isShowScrollBar) _buildScrollBar();

3、_buildScrollBar函数实现计算左侧和底层的滚动条。

根据zrender的高度和宽度,在zrender中增加2个长方形。

1
2
3
4
5
    var  barPosition = [];
             barPosition[0] = (zr.getWidth() / 2 - 50);
             barPosition[1] = (zr.getHeight() / 2 - 50);
             Ox = barPosition[0];
             Oy = barPosition[1];

长方形的宽度和高度由样式定义。

纵向滚动条实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
   var  vscrollArea = {
                 shape: 'rectangle' ,
                 id: 'vscrollArea' ,
                 style: {
                     x: zr.getWidth()-20,
                     y: 10,
                     width: 20,
                     height: zr.getHeight() - 30,
                     color:  'gray' ,
                     opacity: 0.3
                 }
             };
             var  vscroll = {
                 shape: 'rectangle' ,
                 id: 'vscroll' ,
                 style:{
                     x: zr.getWidth() - 20,
                     y: barPosition[1],
                     width: 20,
                     height: 50,
                     color: '#5BB1E4'
                 },
                 draggable :  true ,
                 ondrift :  function (shape, dx, dy) {
                     shape.style.y += dy;
                     if (shape.style.y < 10) 
                         shape.style.y = 10
                     else  if  (shape.style.y > zr.getHeight() - 70 )  // 80 = 50 + 40 - 10
                         shape.style.y = zr.getHeight() - 70;
                     zr.modShape(shape.id, shape);
                     zr.refresh();
                     return  true ;
                 },
                 ondragstart:  function (params) {
                     var  shape = params.target;
                     temperature = 0.001  //拖动滚动条时图不动 
                 },
                 ondragend  :  function (params) {
                     var  shape = params.target;
                     self.clear();
                     _buildShape();
                     temperature = 1.0;
                     dy = (shape.style.y - Oy)*2; 
                     for ( var  in  nodeShapes){
                         nodeShapes[i].style.y -= dy;
                         nodeShapes[i].style.x -= dx;
                     }
                     _step();
                     return  true ;
                 }   
             };

以纵向滚动条为例。vscrollArea是滚动条滚动区域,如图中的红色1,vscroll是可见可拖动的滚动条,如图中的红色2.

IT分享ECharts教程,ECharts 人物关系图,ECharts 力导向布局图,ECharts 人物关系图拖拽,ECharts 人物关系图点击事件,ECharts 点击事件,ECharts功能扩展,echarts 滚动条


横向滚动条实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    var  hscrollArea = {
                 shape:  'rectangle' ,
                 id:  'hscrollArea' ,
                     style: {
                         x: 10,
                         y: zr.getHeight() - 20,
                         width: zr.getWidth() - 30,
                         height: 20,
                         color:  'gray' ,
                         opacity: 0.3
                 }
             };
             var  hscroll = {
                 shape: 'rectangle' ,
                 id: 'hscroll' ,
                 style : {
                     x: barPosition[0],
                     y: zr.getHeight() - 20,
                     width: 50,
                     height: 20,
                     color:  '#5BB1E4'
                 },
                 draggable :  true ,
                 ondrift :  function (shape, dx, dy) {
                     shape.style.x += dx;
                     if (shape.style.x < 10) 
                         shape.style.x = 10
                     else  if  (shape.style.x > zr.getWidth() - 70 ) 
                         shape.style.x = zr.getWidth() - 70;
                     zr.modShape(shape.id, shape);
                     zr.refresh();
                     return  true ;
                 },
                 ondragstart:  function (params) {
                     var  shape = params.target;
                     temperature = 0.001  //拖动滚动条时图不动 
                 },
                 ondragend  :  function (params) {
                     var  shape = params.target;
                     self.clear();
                     _buildShape();
                     temperature = 1.0;
                     dx = (shape.style.x - Ox)*2; 
                     for ( var  in  nodeShapes){
                         nodeShapes[i].style.x -= dx;
                         nodeShapes[i].style.y -= dy;
                     }
                     _step();
                     return  true ;
                 }   
             };
             zr.addShape(vscrollArea);
             zr.addShape(vscroll);
             zr.addShape(hscrollArea);
             zr.addShape(hscroll);

参考资料:

HTML5里面的知识:Canvas简单与KineticJS滚动条! - linyahuis和网页设计点滴 - 博客频道 - CSDN.NET 

http://blog.csdn.net/linyahuis/article/details/12754369 

Vue Echarts是基于Vue.js框架封装的一款可视化数据表库。导向(Force-Directed Graph)是其提供的一种表可视化类型。 导向是一种网络,用于展示不同节点(或者说数据)之间的关系。它通过节点与节点之间的和斥来描述节点之间的学模型。每个节点之间的连线代表节点之间的关系,并且线的粗细、颜色等属性可以表示额外的信息。 在Vue Echarts中,导向提供了一些常用的功能,例如: 1. 可以通过数据驱动的方式,轻松地绘制导向。通过绑定数据,Vue Echarts会根据数据的变化自动更新表的显示。 2. 可以自定义节点的样式和属性。例如,可以通过设置节点的大小、颜色、形状等来表示不同节点的特征。 3. 可以通过拖拽节点来改变节点之间的关系。用户可以通过拖动节点,改变节点之间的和斥,从而改变节点的位置和整个表的布局。 4. 可以支持交互和联动。例如,可以在节点上添加点击事件,当用户点击节点时可以显示该节点的详细信息或者跳转至其他页面。 使用Vue Echarts绘制导向需要以下步骤: 1. 引入Vue Echarts库和导向的组件。 2. 创建一个Vue实例。 3. 在Vue实例中定义数据,包括节点和节点之间的关系。 4. 在Vue实例中配置导向的属性,例如布局方式、和斥的大小等。 5. 在Vue的模板中使用echarts组件,并将数据绑定到echarts组件上。 6. 在Vue实例中添加其他相关的方法和事件。 以上是关于Vue Echarts导向的简要介绍,通过Vue Echarts,我们可以轻松地实现导向的可视化效果,并且可以根据需求进行自定义和交互的设置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值