HTML5实现的矢量卡片式组织结构图

组织结构图(Organization chart)是企业的流程运转、部门设置及职能规划等最基本的结构依据。和客户交流时,不少人都提到需要一个灵活的工具来绘制呈现企业的组织架构,今天就给大家带来一款用TWaver实现的组织结构图,提供多种布局方式,为了清晰呈现组织里每个人的职能,我们定制了名片样式来展示网元。

首先来看下整体效果。

先来一个经典的上下层级布局:

再来一个圆形布局:

这些布局用twaver来实现是非常的合适,实现起来也是很容易,twaver内部就提供了多种布局方式:自左向右,从下向上,具体可以看twaver官方文档介绍,这里就不多说了。

今天我们着重说一下twaver如果实现上图中的网元。先放大看看效果:

这里借用了女神的范冰冰头像。我们假设范冰冰为财务部出纳,我想范爷做为财务部主管也是当之无愧的,从刚开始的北漂到后来的一夜狂赚8千万。现在的社会,只要有钱投资了房产后半辈子就不用愁了,闲话不多扯。这里我们采用的是名片式的方式来呈现组织图上的每个网元,左侧一张图片,右侧是职称,这种矢量和位图的结合效果也是非常赞的。那么这种网元如何来实现呢?首先我们需要定义一个圆角矩形:

twaver.Util.registerImage('employee', {
		w: 200,
		h: 135,
		cache: false,
		origin: {x:0, y:0},
		v: [{
			shape: 'rect',
			w: '100%',
			h: '100%',
			r: 8,
			lineColor:'black',
			lineWidth:2.5,
			fill: '#F5ECCE',
		}],
	});

在圆角矩形的右侧放上文字:

{
			shape: 'text',
			text: '<%=getClient("text")%>',
			font: '12px "Microsoft Yahei"',
			translate: {x:150,y:135/2},
		}

translate是将文字平移到指定的位置,这里我们需要放在右侧,因此需要设置偏右,x,y是相对于网元左上角原点来设置的。

接下来需要在左侧放置一个椭圆用于放组织节点的照片,这里的椭圆可以直接用path来描述 。

{
			shape: 'path',
			data: 'M-45,-25Q-45,-64,0,-64Q45,-64,45,-25L45,25Q45,64,0,64Q-45,64,-45,25z',
			lineColor:'#BBBBBB',
			lineWidth:1,
			translate: {x: 60, y:135/2}
		}

data用于描述path的路径,这里面的M,Q,L分别代表moveto,quadraticCurveTo和lineto,比如M-45,就是移动到-45的位置上。具体的含义可以参考我们的官方文档。

接下来需要加上员工的图片,图片这里采用的是一般的位图,位图需要注册后才能使用。由于原始图片是方形的,需要裁减出圆角矩形的形状,说到裁减,twaver的矢量描述中支持clip,默认是不clip,设置clip之后,就会将超出矢量图片之外的区域的进行裁剪,可以用shape来描述裁减的区域,这里我们需要裁剪出圆角矩形,因此设置和上面矩形相同的path路径即可。

twaver.Util.registerImage('clip_pic', {
		w: 128,
		h: 128,
		cache: false,
		clip: {
			shape: 'path',
			data: 'M-45,-25Q-45,-64,0,-64Q45,-64,45,-25L45,25Q45,64,0,64Q-45,64,-45,25z',
		},
		v: [{
			shape: 'image',
			x:-64,
			y:-64,
			name: '<%=getClient("pic")%>',
		}],
	});

关于clip的更多使用,可以参考下面的文档:

html5-canvas-clipping-region-tutorial

canvas-clip-image-in-a-circle

好了,一个组织结构图的网元就这样轻松实现。最后随机造一些数据可以看到整体效果了

想要具体demo的小伙伴,请发邮件至tw-service#servasoft.com,我们会将完整代码发送给您。

时间: 2024-08-02 02:07:49

HTML5实现的矢量卡片式组织结构图的相关文章

【AmazeUI】卡片式布局

本文与<[Ratchet]卡片式布局>(点击打开链接)为姊妹篇,在AmazeUI的官网上没有这种布局,但是,我们可以利用其面板组的方式去实现. 先贴上本网页所处的目录结构,同样地,在windows下的Web文件夹趴了几张图片做实验.当然,为了节省用户的流量与节省服务器的容量,实际的操作中不应该使用如此高清的图片. 做出如下的效果: 其现实的代码如下: <!--使用HTML5开发--> <!doctype html> <html class="no-js&

圆角边框以及阴影制作卡片式图片 - 学习笔记

圆角边框以及阴影制作卡片式图片 圆角边框 border-radius 卡片使用阴影 box-shadow 利用阴影给图片底部创造一个长方形 内部的元素会直接覆盖整个阴影 HTML 部分 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>卡片式图片&l

谈什么是卡片式设计?

卡片式设计 卡片,你或许不熟悉这个术语,但是你绝对不会对卡片的概念感觉陌生.现在,卡片在网页设计中是普遍存在的,并且还将越来越流行.事实上,Google,Twitter和Facebook这三大受推崇的网页全是这么设计的,所以至少粗略的看一下卡片是很值得的.但是,因为我们不想在这浅谈,所以让我们直接深入地了解一下吧! 什么是卡片? 简单的回答,卡片就是交互信息的承载体,通常以矩形的方式呈现.就像信用卡或者棒球卡,网页卡片以一个浓缩的形式提供了快速并且相关的信息. 所有的卡片特点就是交互性.不仅仅是

【Ratchet】卡片式布局

卡片式布局在手机版的网站中很常见,这一点Ratchet框架中,这一点还做得不错的. 本手机版网页的开放前端框架的搭建,在<[Ratchet]Ratchet2.0.2的下载.配置与Helloworld>(点击打开链接)中已经介绍过了. 比如如下的效果: 其实现代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&g

避免窗口切换闪烁——卡片式布局的使用方法

在一个程序中,如果每个模版的切换都需要开启一个新窗口,一来窗口逐渐多了会造成混乱,二来新窗口突然弹出造成的闪烁难免会然用户产生不好的体验. 这时,可以使用卡片式布局来实现在一个窗口内切换不同面板. 1:首先,往窗口拖动一个面板,作为母容器. 2:右键该面板,选择“设置布局”——>“卡片式布局” 3:之后就可以往该母容器添加面板,调整大小.添加组件.设置事件.注意,添加的面板要在导航器中调整等级,必须处于母容器内并且子容器并行等级.并且,卡片在母容器内的序号同其添加的顺序,而且从2开始递增.0,1

树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA

目录: 1. 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装 2. 树莓派Odroid等卡片式电脑上搭建NAS教程系列2-SSH连接访问 3. 树莓派Odroid等卡片式电脑上搭建NAS教程系列3-挂载HDD硬盘+节电设置 4. 树莓派Odroid等卡片式电脑上搭建NAS教程系列4-FTP安装 5. 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装 6. 树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA 该文章首发于浩瀚

【ExtJs】折叠式布局与卡片式布局

ExtJs中,除了border布局可以很好地做出成熟的界面,<[ExtJs]利用树状结构.Border布局与标签页刻划OA界面>(点击打开链接),常用的标签页布局<[ExtJs]tabPanel标签页与修改标签页的内容>(点击打开链接)以外.在ExtJs中我觉得最好的主布局还有折叠式布局与卡片式布局,而使组件一列排列vbox布局,与使组件一行排列hbox布局,我觉得还可以出出子布局,也就是主布局里面的东西,而那些什么表格布局,我觉得真没有什么用了,还不如直接放一个table标签或者

卡片式大学综合英语词汇(Windows Phone 8.1 RT app)

闲暇时间写的简易卡片式记单词app.词库是原滋原味的大学综合英语词汇,包含语音,使用卡片式设计.离线词库,随时随地记单词. 商店:http://www.windowsphone.com/zh-cn/store/app/%E5%A4%A7%E5%AD%A6%E7%BB%BC%E5%90%88%E8%8B%B1%E8%AF%AD%E8%AF%8D%E6%B1%87/2beffb97-59dc-4d31-b249-b889c5f4bf85?

android 卡片式视图组件 cardview的使用

cardview是放在support library v7包中的一个组件(recyclerview也是在这里喔,详细会在后边的博客里介绍) 开始在写recyclerview的demo的时候,发现别人写出来的都是卡片式的布局,很好看喔-而我写的还是和原来的ListView一个样式,查了半天,最后才发现在条目布局上出现了不同,这里也就涉及到了cardview的使用. <span style="font-size:14px;"><android.support.v7.wid