cytoscape.js是一个做网页可视化的常用工具 。cytoscape.js包含图论模型和可选的渲染器,用于显示交互式图形。该库旨在使程序员和科学家尽可能轻松地在他们的应用程序中使用图形理论,无论是用于Node.js应用程序中的服务器端分析还是用于丰富的用户界面。
npm install cytoscape
bower install cytoscape
jspm install npm:cytoscape
<script src="cytoscape.min.js"></script>
var cy = cytoscape({
container: document.getElementById('cy') // container to render in
});
也可以给container传递jQuery实例
var cy = cytoscape({
container: $('#cy')
});
{
// very commonly used options
container: undefined,
elements: [ /* ... */ ],
style: [ /* ... */ ],
layout: { name: 'grid' /* , ... */ },
// initial viewport state:
zoom: 1,
pan: { x: 0, y: 0 },
// interaction options:
minZoom: 1e-50,
maxZoom: 1e50,
zoomingEnabled: true,
userZoomingEnabled: true,
panningEnabled: true,
userPanningEnabled: true,
boxSelectionEnabled: true,
selectionType: 'single',
touchTapThreshold: 8,
desktopTapThreshold: 4,
autolock: false,
autoungrabify: false,
autounselectify: false,
// rendering options:
headless: false,
styleEnabled: true,
hideEdgesOnViewport: false,
textureOnViewport: false,
motionBlur: false,
motionBlurOpacity: 0.2,
wheelSensitivity: 1,
pixelRatio: 'auto'
}
cy.add()
cy.add({
group: 'nodes',
data: { weight: 75 },
position: { x: 200, y: 200 }
});
var eles = cy.add([
{ group: 'nodes', data: { id: 'n0' }, position: { x: 100, y: 100 } },
{ group: 'nodes', data: { id: 'n1' }, position: { x: 200, y: 200 } },
{ group: 'edges', data: { id: 'e0', source: 'n0', target: 'n1' } }
]);
cy.remove()
var j = cy.$('#j');
cy.remove( j );
var collection = cy.elements('node[weight > 50]');
cy.remove( collection );
var collection = cy.elements('node[weight > 50]');
cy.remove( collection );
cy.collection()
— 获取一个空集合
例如使用集合保存被点击过的节点
var collection = cy.collection();
cy.nodes().on('click', function(e){
var clickedNode = e.target;
collection = collection.union(clickedNode);
});
cy.getElementById( id )
参数为元素的id值
cy.getElementById('j');
或者使用下列方式
cy.getElementById('j');
cy.$("#a") // 获取id值为a的元素
cy.elements('[weight > 50]'); // 获取权重大于50的元素
cy.nodes('[weight > 50]'); // 获取权重大于50的节点
cy.edges('[source = "j"]'); // 获取源点为id为j的节点的边
cy.filter('[weight > 50]');
使用回调函数的方式实现上面用选择器匹配的效果
cy.filter(function(element, i){
return element.isNode() && element.data('weight') > 50;
});
这允许在不触发多个样式计算或多个元素重绘的情况下操作元素。此函数对于同时对元素进行许多更改非常有用。当指定的回调函数完成时,只有需要它的元素才会更新它们的样式,而呈现器最多只会重新绘制一次。
包含下列三个API:
cy.$('#j')
.data('weight', '70') // 样式更新
.addClass('funny') // 样式更新
.removeClass('serious') // 样式更新
// 至少一次,至多3次重绘,这取决于上述操作执行的速度
这对于少数元素的样式更新没有问题,但是如果对于大批量的元素进行上述操作,会造成很多冗余的重绘,导致性能问题,下面用批处理来解决上述问题
cy.batch(function(){
cy.$('#j')
.data('weight', '70')
.addClass('funny')
.removeClass('serious')
;
});
cy.startBatch();
cy.$('#j')
.data('weight', '70')
.addClass('funny')
.removeClass('serious')
;
cy.endBatch();
cy.mount( container )
container参数为挂载的dom元素
cy.mount( container )
移除container dom元素上挂载的cytoscape实例
销毁cytoscape实例
cy.destroy()
可以使用cy.cy.destroy()来判断cytoscape实例是否已经被销毁
cy.data() — 获取整个图的数据对象
cy.data( name ) — 获取指定字段名的数据
cy.data( name, value ) — 绑定键为name,值为value的数据
cy.data( obj ) — 通过对象更新途中的多个字段值数据
cy.scratch()
设置或获取暂存数据,其中可以存储临时数据或非json数据。应用程序级别的暂存数据应该使用带下划线前缀的名称空间,如’_foo’
cy.scratch() — 获取图所有名称空间下的暂存数据
cy.scratch( namespace ) — 获取指定名称空间下的暂存数据
cy.scratch( namespace, value ) — 添加名称空间namespace,并设置暂存值为value
移除图的暂存数据
cy.removeScratch( namespace )
移除指定命名空间下的暂存数据, 不添加命名空间参数则会清空所有图相关的暂存数据
别名: cy.bind(),
cy.listen(),
cy.addListener()
事件的绑定方式如下:
cy.on( events [, selector], function(event) )
空格分隔的时间名列表
可选参数, 如果不传递,事件将被绑定在整个图实例上
选择器,匹配到的元素将被绑定事件
function(event)
事件监听的回调函数
监听到的事件对象
一个实例
cy.on('tap', 'node', function(evt){
var node = evt.target;
console.log( 'tapped ' + node.id() );
});
下列代码没有指定选择器,则事件被绑定到了整个图实例上
cy.on('tap', function(event){
// target holds a reference to the originator
// of the event (core or element)
var evtTarget = event.target;
if( evtTarget === cy ){
console.log('tap on background');
} else {
console.log('tap on some element');
}
});
别名: pon
事件触发后将获取到一个成功态的的Promise对象
cy.promiseOn( events [, selector] )
cy.pon('tap').then(function( event ){
console.log('tap promise fulfilled');
});
绑定的事件只响应一次
cy.one('tap', 'node', function(){
console.log('tap!');
});
cy.$('node').eq(0).trigger('tap'); // 触发事件,事件不再响应
cy.$('node').eq(1).trigger('tap'); // 事件不再响应
cy.removeListener( events [, selector] [, handler] )
空格分隔的事件名列表
选择器,匹配到的元素将进行事件移除,可选参数,如果不指定,则移除对象为图实例
handler
可选参数,可指定移除指定的处理器函数对象关联的事件,不指定则移除所有指定类型的事件处理器监听
如下:
实例1: 不指定具体的事件处理器
cy.on('tap', function(){ /* ... */ });
// remove all tap listener handlers, including the one above
cy.removeListener('tap');
实例2: 针对具体的事件处理器进行事件绑定和解绑
var handler = function(){
console.log('called handler');
};
cy.on('tap', handler);
var otherHandler = function(){
console.log('called other handler');
};
cy.on('tap', otherHandler);
// just remove handler
cy.removeListener('tap', handler);
cy.removeAllListeners()
cy.emit(), 别名cy.trigger()
cy.emit( events [, extraParams] )
cy.on('tap', function(evt, f, b){
console.log('tap', f, b);
});
cy.emit('tap', ['foo', 'bar']);
cy.ready()
一旦图形准备好(即初始数据加载和初始布局完成),就运行一个回调。
cy.ready(function(event){
// do something
}
cy.container()
var j = cy.$('#j');
cy.center( j );
5.3 自适应
cy.fit() — 自动调整图的平移距离和缩放级别以达到正好容纳元素的效果
cy.fit( cy.$('#j, #e') );
cy.reset()
setTimeout( function(){
cy.pan({ x: 50, y: -100 });
}, 1000 );
setTimeout( function(){
cy.zoom( 2 );
}, 2000 );
setTimeout( function(){
cy.reset();
}, 3000 );
cy.pan({
x: 100,
y: 100
});
console.log( cy.pan() );
cy.panBy( renderedPosition )
如将图形向右平移100像素:
cy.panBy({
x: 100,
y: 0
});
cy.panningEnabled( bool )
cy.userPanningEnabled( true );
cy.zoom() 获取缩放级别
cy.zoom( level ) 设置缩放级别
cy.zoom( options ) options The options for zooming.
level
缩放级别
要缩放的位置
缩放到的位置
position和renderedPosition不要同时指定
eg:
cy.zoom({
level: 1.5,
position: cy.getElementById('a').position()
});
cy.minZoom() — 获取最小缩放级别
cy.maxZoom() – 设置最小缩放级别
cy.viewport( zoom, pan ) — 通过一个函数来设置缩放级别和平移位置
cy.viewport({
zoom: 2,
pan: { x: 100, y: 100 }
});
cy.zoomingEnabled() — 获取是否支持缩放
cy.zoomingEnabled(bool) — 设置是否支持缩放
userZoomingEnabled() — 获取是否支持用户使用鼠标等交互方式进行缩放
userZoomingEnabled( bool ) — 设置是否支持用户使用鼠标等交互方式进行缩放
获取或设置是否启用了框选择。如果同时启用平移,用户必须按住shift、control、alt或command中的一个来启动框选择
cy.boxSelectionEnabled( true );
设置或设置选择类型。“single”选择类型是默认的,点击一个元素将选择该元素并取消选择前面的元素。
还可以指定为追加类型"additive", 可逐次选中多个元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0B18sP3a-1604913881342)(/Users/liwei/Library/Application Support/typora-user-images/image-20200418201051078.png)]
获取或设置节点是否被自动锁定(即,如果为真,则无论节点的状态如何都被锁定)
cy.autolock( bool )
cy.resize()
别名: cy.invalidateDimensions()
cy.animated() 判断是否有动画在进行
cy.animate( options ) 操纵视口执行动画options An object containing the details of the animation.
zoom
一个缩放级别(数字)或一个缩放配置对象。
level
要使用的缩放级别。
缩放发生的位置。这将自动修改pan,使指定的模型位置在缩放期间保持在viewport区段中的相同位置。
关于缩放发生的渲染位置,作为使用模型位置的替代。这将自动修改pan,使模型位置(与动画开始时呈现的位置相对应)在缩放期间保持在viewport区段中的相同位置。
图形将被移动到的平移位置。
图形将被移动到的相对平移位置。
fit
一个包含图自动调整以适应对应元素的参数对象
视口将进行调整以容纳对应元素
padding
Padding to use with the fitting (default 0
).
center
一个对象,该对象包含将从其中对图形进行动画处理的居中选项。
将视口置于中心的elements或选择器
duration
动画执行时间
queue
一个布尔值,指示是否对动画进行排队(默认为“true”)。核心上排队的动画按顺序运行,直到队列为空。
指定 transition- time- function 类型,以形成动画的进度曲线。
complete
动画执行完成时候执行的回调函数
step
动画步骤调用回调。
eg:
cy.animate({
pan: { x: 100, y: 100 },
zoom: 2
}, {
duration: 1000
});
cy.animate({
fit: {
eles: j,
padding: 20
}
}, {
duration: 1000
});
获取视口的动画。
cy.animation( options )
options参数同上, 该函数用来获取指定配置信息的动画
cy.delay( duration, complete )
cy
.animate({
fit: { eles: '#j' }
})
.delay(1000) // 1s
.animate({
fit: { eles: '#e' }
})
;
cy.delayAnimation( duration )
— duration为延迟时间
stop(clearQueue, jumpToEnd)
clearQueue是一个布尔值(默认为false),表示动画队列是否应该被清空。
jumpToEnd一个布尔值(默认为false),指示当前运行的动画是否应该跳转到它们的末端,而不是中途停止。
cy.animate({
fit: { eles: '#j' }
}, { duration: 2000 });
// stop in the middle
setTimeout(function(){
cy.stop();
}, 1000);
删除viewport中所有排队的动画。
cy.layout()
别名: cy.createLayout()
, cy.makeLayout()
获取一个新的布局,它可以用于用算法在图中定位节点。
cy.layout( options )
cy.layout()会返回一个布局实例,可以基于这个实例进行其他操作
var layout = cy.layout({
name: 'random'
});
layout.run();
cy.style()
cytoscape.stylesheet()
对象, 一个样式对象的字符串, 也可以指定为JSON格式的字符串(格式参考options.style`)cytoscape({
container: document.getElementById('cy'),
// ...
style: 'node { background-color: green; }'
// , ...
});
cytoscape({
container: document.getElementById('cy'),
// ...
style: [
{
selector: 'node',
style: {
'background-color': 'red'
}
}
// , ...
]
// , ...
});
cytoscape({
container: document.getElementById('cy'),
// ...
style: cytoscape.stylesheet()
.selector('node')
.style({
'background-color': 'blue'
})
// ...
// , ...
});
cytoscape({
container: document.getElementById('cy'),
// ...
style: cytoscape.stylesheet()
.selector('node')
.style({
'background-color': function( ele ){ return ele.data('bg') }
// which works the same as
// 'background-color': 'data(bg)'
})
// ...
// , ...
});
cy.style()
.clear() //清除默认样式而应用一个全新的样式
// 定义节点样式
.selector('node')
.style('background-color', 'magenta')
// 定义边样式
.selector('edge')
.style({
'width': 3,
'line-color': 'yellow'
})
// ...
.update() // 显示声明样式更新代码的结束,通知cytoscape更新元素样式
;
cy.style()
.fromString('node { background-color: blue; }')
.update() // update the elements in the graph with the new style
;
var styleJson = cy.style().json();
var serializedJson = JSON.stringify( styleJson );
cy.png( options )
options
导出参数设置
output
输出应该是“base64uri”(默认)、“base64”、“blob”还是“blob-promise”(返回解析为blob的Promise)。
bg
图像的背景颜色(默认为白色)。
full
是导出当前的viewport视图(“false”,默认)还是导出整个图(“true”)。
scale
此值指定一个正数,该正数缩放生成的图像的大小。
maxWidth
指定与“maxHeight”组合的自动比例,以便生成的图像宽度不超过“maxWidth”。
maxHeight
指定与“maxWidth”组合的自动比例,以便生成的图像不高于“maxHeight”。
eg:
var png64 = cy.png();
// put the png data in an img tag
document.querySelector('#png-eg').setAttribute('src', png64);
cy.jpg()
cy.jpg( options )
options
导出参数对象
output
输出应该是“base64uri”(默认)、“base64”、“blob”还是“blob-promise”(返回解析为blob的Promise)。
bg
图像的背景颜色(默认为白色)。
full
是导出当前的viewport视图(“false”,默认)还是导出整个图(“true”)。
scale
此值指定一个正数,该正数缩放生成的图像的大小。
maxWidth
指定与“maxHeight”组合的自动比例,以便生成的图像宽度不超过“maxWidth”。
maxHeight
指定与“maxWidth”组合的自动比例,以便生成的图像不高于“maxHeight”。
quality
指定从’ 0 ‘(低质量,低文件大小)到’ 1 '(高质量,高文件大小)的图像质量。如果没有设置,则使用浏览器的默认质量值。
var jpg64 = cy.jpg();
// put the png data in an img tag
document.querySelector('#jpg-eg').setAttribute('src', jpg64);
cy.json()
以初始化时使用的相同JSON格式导入或导出图数据。
cy.json( flatEles )
flatEles
resulant JSON是否应该将元素包含为平面数组(’ true ‘)或两个按组键控的数组(’ false ',默认)。
cy.json( cyJson )
将图形作为JSON导入,只更新指定的字段。
具有与应该更改的状态对应的字段的对象。
eg:
cy.json({
zoom: 2
});