想了想序号还是接上一篇分享的的序号接着写,如果在本文中没有获取需要的答案,可以移步去看看上一篇的分享。gojs 超多超实用经验分享(一)

22. 指定线段连接到节点的某一个特定的接口上

如果不指定链接点的话,gojs会自动规划一条路径,具体算法还不是很清楚,总之大部分时候按默认的算法规划出来的路径,还是比较美观的,但是当节点比较多且关系复杂的时候,可能会出现几条线路并不是很美观,需要自己动态的调整一下,看下两种写法:

第一种:所有节点均指定相同的出入连接点,关键属性:fromSpot、toSpot

可选值 :Top、 Bottom、Right 、Left 是从节点对应方向的center开始连接, 也可以指定: TopRight、 TopLeft、BottomRight、BottomLeft

myDiagram.linkTemplate = $(
go.Link,
{
// routing, corner, curve....等属性
fromSpot: go.Spot.Top, // 从上出
toSpot: go.Spot.Bottom // 从下入
},
);

第二种: 根据不同的属性,动态绑定,关键属性:fromSpot、toSpot,关键方法:go.Binding

myDiagram.linkTemplate = $(
go.Link,
{
// routing, corner, curve....等属性
},
new go.Binding("toSpot",'linkto',()=>go.Spot.Top), // 回调函数 返回具体连接点位置
);
var linkDataArray = [
{ from: "A", to: "B",linkto:'Top'}, // 属性名随便,值也随便,上边回调判断的是,linkto字段有没有值
{ from: "B", to: "C",,linkto:'Top'},
];

23. 给节点设置连线端口spot

myDiagram.nodeTemplate =$(
go.Node,
'Auto',
$(
go.Shape,
'RoundedRectangle',
{ fill: '#eee', parameter1: 5, opacity: 0.7, stroke: '#eee' },
),
// 其他Panel / Shape / TextBlock 零件配置
$(go.Panel, 'Vertical', { alignment: go.Spot.TopLeft }, makePort('1')),
$(go.Panel, 'Vertical', { alignment: go.Spot.TopRight }, makePort('2'))
) nodeDataArray = [{ key: 'A' },{ key: 'B' }]
linkDataArray = [{ from: 'A', to: 'B', frompid: '1', topid: '2'}]
myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray)
myDiagram.model.linkFromPortIdProperty = 'frompid' // 1
myDiagram.model.linkToPortIdProperty = 'topid' // 2 // 创建端口
function makePort(name) {
var port = $(go.Shape, 'Rectangle', {
fill: 'transparent',
stroke: null,
desiredSize: new go.Size(8, 8),
portId: name,
toMaxLinks: 3,
cursor: 'pointer'
},
new go.Binding('fromSpot', 'xxx', () => go.Spot.Right),
new go.Binding('toSpot', 'xxx', () => go.Spot.Left)
) var panel = $(go.Panel, 'Horizontal', { margin: new go.Margin(8, 0) })
panel.add(port)
return panel
}

24. 设置折叠面板及部分默认样式

$('PanelExpanderButton', 'COLLAPSIBLE', {
alignment: go.Spot.Right,
_buttonExpandedFigure: 'M0 0 L8 0',
_buttonCollapsedFigure: 'M0 0 L8 0 M4 -4 L4 4',
'ButtonBorder.fill': '#fff',
'ButtonBorder.stroke': '#fff',
width: 15,
height: 15,
margin: 3,
})

25. itemArray 抽离封装引用,面板中设置表格,并给表格设置边框

// 表格数据,用于下方面板中
var fieldTemplate = $(
go.Panel,
'TableRow',
$(
go.TextBlock,
{
margin: new go.Margin(3, 5),
column: 1, // 表格第一列
font: '13px sans-serif',
alignment: go.Spot.Left
},
new go.Binding('text', 'name')
),
$(
go.TextBlock,
{
margin: new go.Margin(3, 5),
column: 2, // 表格第二列
font: 'bold 13px sans-serif',
alignment: go.Spot.Left
},
new go.Binding('text', 'age'),
)
);
// 表格面板
$(
go.Panel,
'Table',
{
name: 'COLLAPSIBLE',
stretch: go.GraphObject.Horizontal,
background: 'white',
defaultAlignment: go.Spot.Left,
itemTemplate: fieldTemplate,
defaultColumnSeparatorStroke: '#ccc', // 列边框
defaultRowSeparatorStroke: '#ccc' // 行边框
},
new go.Binding('itemArray', 'dataList')
)

26. 设置渐变色

const pinkbluegrad= $(go.Brush, 'Linear', { 0: '#F48FB1', 1: '#90CAF9' })  // 粉蓝渐变
$(go.Shape, "Rectangle",{ desiredSize: new go.Size(30, 30), fill: pinkbluegrad, margin: 5 }),

27. 与端口相邻的链路段的长度

myDiagram.linkTemplate = $(
go.Link,
{
// routing ,corner ,... ,
fromEndSegmentLength: 40,
toEndSegmentLength:40
})

28. 设置/关闭选中效果

选中效果,就是节点外层有一层蓝色的边框, 选中的样式也是可以自定义的,详细可以查看下文档,因为我没有用到,所以就没进行记录。

myDiagram.select(myDiagram.findNodeForKey(key))   // 设置选中节点
$( go.Node, 'auto', { selectionAdorned: false}) // 关闭选中节点

29. 画布垂直水平居中

尽量能够保证在画布init之后,在执行,可以在外层加一个定时器

myDiagram.alignDocument(go.Spot.Center, go.Spot.Center)
myDiagram.contentAlignment = go.Spot.Default
myDiagram.commandHandler.scrollToPart(diagram.findNodeForKey(key))

30. 将某一个节点聚焦至画布中心

myDiagram.commandHandler.scrollToPart(myDiagram.findNodeForKey(key))

31. button使用和修改默认样式

还有更多的自定义样式,可以去button.js源码中查看。

$(
'Button',
{
'ButtonBorder.fill': 'white',
'ButtonBorder.stroke': 'white',
_buttonFillOver: '#E0E0E0',
_buttonStrokeOver: '#E0E0E0',
cursor: 'pointer',
maxSize: new go.Size(100, NaN),
minSize: new go.Size(60, NaN),
click: ()=>{} // 建议单独抽离为一个函数
},
$(go.TextBlock, new go.Binding('text'))
),

可视化—gojs 超多超实用经验分享(二)的更多相关文章

  1. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...

  2. APICloud超实用经验分享——平台功能

    从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...

  3. 总结ThinkPHP使用技巧经验分享(二)

    循环输出volist 还有别名 iterate 模版赋值:$User = D('User')$list = $User->findAll()$this->assign('list',$li ...

  4. MySQL 性能优化的最佳20多条经验分享(二)(转)

    11. 尽可能的使用 NOT NULL 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL.这看起来好像有点争议,请往下看. 首先,问问你自己"Empt ...

  5. 关于启用 HTTPS 的一些经验分享(二)

    转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...

  6. 【老司机经验】CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享

    CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享 1.缘起    这些年来一直在其他公司的实验箱和别人的开发板上进行教学与开发工作,总是觉得功能设计不那么合意.心里突然冒出个 ...

  7. 好文推荐:转载一篇别人kaggle的经验分享

    转载:https://www.toutiao.com/i6435866304363627010/ 笔者参加了由Quora举办的Quora Question Pairs比赛,并且获得了前1%的成绩.这是 ...

  8. 使用latex撰写博士,硕士学位论文(浙大博士经验分享)

    使用latex撰写博士,硕士学位论文(浙大博士经验分享) 浙大博士:  个人感觉,还是要用latex来写.因为之前发过几篇word排版的中文论文,在参考文献的引用.文字格式调整上,实在是难受.如果坚持 ...

  9. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  10. Splunk大数据分析经验分享

    转自:http://www.freebuf.com/articles/database/123006.html Splunk大数据分析经验分享:从入门到夺门而逃 Porsche 2016-12-19 ...

随机推荐

  1. C# 借助NPOI 完成 xls 转换为xlsx

    背景:MinExcel开源类库,导数据的库,占用内存很低,通过io,不通过内存保存,不支持 xls格式的文件,支持csv和xlsx,所以要想使用这个库,就得把xls格式转换为xlsx.只复制了数据 合 ...

  2. C# XML转Json Json转XML XML 转对象 对象转XML

    对象转XML对象时,只能是一个JObject对象,不能是一个集合对象.如果对象是一个列表集合,需要定义一个根对象比如这样:var obj =new { Root = ListLogs[ListLogs ...

  3. Java应用的优雅停机

    一. 优雅停机的概念 优雅停机一直是一个非常严谨的话题,但由于其仅仅存在于重启.下线这样的部署阶段,导致很多人忽视了它的重要性,但没有它,你永远不能得到一个完整的应用生命周期,永远会对系统的健壮性持怀 ...

  4. WPF加载GIF的五种方式(Storyboard / WpfAnimatedGif / ImageAnimator / PictureBox / MediaElement)

    部分内容参考博文WPF 如何显示gif 一.使用Storyboard 效果: (1)页面xaml: <Window x:Class="PlayGifDemo.StoryboardWin ...

  5. docker资源限制与数据持久化

    1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...

  6. 8.15考试总结(NOIP模拟40)[送花·星空·零一串]

    我只对现实世界绝望过,却未对自己绝望过! T1 送花 解题思路 线段树维护序列. 我们暴力枚举右端点,用线段树搞出当前右端点的最优的左端点的值. 假设当前扫到的右端点是 r ,颜色是 col. 这种颜 ...

  7. FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

    ​<FFmpeg开发实战:从零基础到短视频上线>一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流.不过MediaMTX的功能 ...

  8. 获得centos7网络yum源

    获得centos73网络yum源 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo 网易 wget -O /etc/yum.repos.d ...

  9. Steam Epic 启动程序默认地址

    Steam Epic 启动程(启动器)序默认地址 "D:\Games\EpicAPP\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesL ...

  10. rsync备份任务练习

    06-备份任务实战 今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用. 先看需求 再讲解 再次动手实践 客户端需求 客户端需求: 1.客户端每天凌晨1点在服务器本地打包备份( ...