- 浏览: 166088 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qq_21380041:
954414957@qq.com
HTML5数据可视化第二弹:打造最美3D机房 -
qq_21380041:
楼主,求代码
HTML5数据可视化第二弹:打造最美3D机房 -
luoaz:
楼主能不能传个源码的附件上来, 分享学习下呢?
HTML5+WebGL 3D机房开发实例 -
xiaosi1278:
你好能不能把你讲的源代码发一下!!做参考403541110@q ...
TWaver 3D 编辑器的使用(一)----设计3D场景以及数据绑定 -
TWaverGeek:
BigBird2012 写道您好,您能把您使用TWaver导入 ...
TWaver导入导出AutoCAD DXF图纸
JavaScript是一门动态语言,但是面向对象的特征没有Java那么明显,导致我们开发起来非常不习惯。拿继承来说,Java中有专门的extends和implements关键字实现,但是在JavaScript却引入了一个"别扭的"prototype,而且实现方式有很多种,虽然灵活,却很容易让初学者一头雾水不知所措。TWaver HTML5的doc是一个js文件,对编辑器很友好,但是我们看起来却不是很方便,远不如JavaDoc来得一目了然,于是我们做了另一个html,算是对原js格式doc的补充。先看一下最后完成的效果:
运行截图:
这并不是一个静态页面,而是用JavaScript动态解析TWaver,所以即使TWaver更新也没关系,只要在这个html中引入新的twaver.js就可以了。
界面说明:整个页面的布局借助twaver.controls.SplitPane实现,左侧是TWaver的树组件,中间是List组件,右侧是一个pre标签,借助beautify和prettify展现js代码。
接下来介绍一下页面上三个部分的实现方式:
- Tree的实现,下面是初始化Tree的全部代码:
//twaver.Util.getAllClassNames()返回TWaver所有的内部类型 var allClassNames = twaver.Util.getAllClassNames(); //遍历类名 allClassNames.forEach(function (data) { addClass(data); }); var elementBox = new twaver.ElementBox(); var map = {}; //初始化Tree box function addClass(name) { var node = new twaver.Node(name); node.setName(name); //分割字符串,找我们需要的类或对象 var clazzArr = name.split("."); var clazz = window; for (var i = 0; i < clazzArr.length; i++) { clazz = clazz[clazzArr[i]]; } //根据不同的类型设置Icon if (typeof clazz === "object") { node.setIcon("object"); } else if (typeof clazz === "function") { node.setIcon("class"); } //同时将node存入map,方便查询使用 map[name] = node; node.clazz = clazz; elementBox.add(node); } //... var tree = new twaver.controls.Tree(elementBox);
getAllClassNames返回的是类或对象的名字,但是我们要获得实际的类和对象以便可以解析它们的属性和方法。思考一下:在浏览器环境下window是根对象,所有全局对象都是window对象的属性而已,TWaver也不例外,所以我们分割字符串,通过window对象一层一层找属性,最终找到我们要的类或对象。然后我们生成Node,填充box数据容器;同时做了一个< 名字---Node>的映射,后面会用到。 初始化Tree以后设置节点的父子关系:
elementBox.toDatas().forEach(function (data) { //TWaver所有内置类型都有superClass属性,指向实际的父类或父对象,通过它可以得到父类然后从map中取出树上相应的节点 var superClass = data.clazz.superClass; if (superClass && superClass.getClassName) { data.setParent(map[superClass.getClassName()]); } });
大家注意到,Tree的上方还有一个用来过滤数据的文本框,我们看一下它的事件处理:
//Tree的过滤文本框 var treeFilter = document.createElement("input"); treeFilter.type = "text"; treeFilter.addEventListener("input", function () { var value = treeFilter.value.trim().toLowerCase(); if (value.length > 0) { tree.setVisibleFunction(function (data) { if(data.getName().toLowerCase().indexOf(value)>=0){return true}; //如果当前节点的名字与过滤字符串不匹配,就去查询是否有子节点匹配 //如果子节点匹配,父节点同样可见 return isChildVisible(data, value); }); } else { tree.setVisibleFunction(null); } }); //... //递归是否有子节点可见 function isChildVisible(parent, value) { var children = parent.getChildren(); for (var i = 0; i < children.size(); i++) { var child = children.get(i); if (child.getName().toLowerCase().indexOf(value) >= 0) { return true; } else if (isChildVisible(child, value)) { return true; } } return false; }
对于Tree过滤器,不能简单的判断当前节点,因为可能当前节点的名字不符合过滤字符串,但是子节点符合,这种时候父节点也要显示,所以需要做递归处理:如果当前节点的子节点符合过滤字符串,当前节点同样可见。
- List的实现
tree.getSelectionModel().addSelectionChangeListener(function (e) { var selectedData = tree.getSelectionModel().getLastData(); if (selectedData) { var html = ''; list.getDataBox().clear(); //TWaver内置的属性和方法都在prototype上,所以如果data的类型是function,我们就遍历它的prototype var obj = typeof selectedData.clazz === "function" ? selectedData.clazz.prototype : selectedData.clazz; for (var name in obj) { if (obj.hasOwnProperty(name)) { var listNode = new twaver.Node(); if (typeof obj[name] === "function") { listNode.setIcon("method"); } else { listNode.setIcon("property"); } listNode.setName(name + " - " + typeof obj[name]); //注意getContent方法,对于function直接返回,对于Object再进行一次遍历 listNode.content = "" + getContent(obj[name]); html += name + ":" + listNode.content; list.getDataBox().add(listNode); } } pre.innerHTML = ''; html = js_beautify(html); pre.appendChild(document.createTextNode(html)); prettyPrint(); } });
除了填充list,我们还直接把对象属性的js代码组合起来放到右侧pre中,为了规范js代码,我们用到了js_beautify和prettify两个类库,感兴趣的同学可以谷歌一下。
- pre的实现
//list选中的节点发生变化时更新pre list.getSelectionModel().addSelectionChangeListener(function (e) { var data = list.getSelectionModel().getLastData(); if (data) { pre.innerHTML = ''; var html = js_beautify(data.content + ""); pre.appendChild(document.createTextNode(html)); prettyPrint(); } });
这三部分介绍完,实际上这个页面也就写完了,通过这些代码,大家应该可以感受到JavaScript的灵活之处,页面布局部分的代码就不介绍了,大家可从下载附件自行研究,最后附上附件 见原文最下方
发表评论
-
HTML5数据可视化第四弹:交互式地铁线路图
2016-12-13 15:25 984前言 最近特别忙, ... -
HTML5数据可视化第三弹:萌萌哒拓扑图分组
2016-12-02 09:55 2487前言 最近忙着给客户折腾一个复杂的多层嵌套关系。客 ... -
看HTML5如何化解大型复杂网络拓扑图的分组嵌套效果
2015-06-25 14:12 3623忙完3D,最近又开始用HTML5给客户开发网管界面。这次客 ... -
HTML5数据可视化第二弹:打造最美3D机房
2015-06-01 14:25 12784最近项目开发任务告一段落,刚好有时间整理这大半年的一些成果 ... -
HTML5数据可视化第一弹:彩虹爆炸图
2015-05-19 15:23 8031前言 25年过去了,Brooks博士著名的“没有银 ... -
HTML5组织结构图之名片式网元布局
2015-05-07 11:43 2467组织结构图(Organization chart)是企业的 ... -
HTML5流程图之矢量可伸展workflow
2015-05-06 17:17 11461互联网购物成了当今非 ... -
HTML5流程图之复杂关系网
2015-05-06 17:10 2237关系网图的呈现方式多种多样,今天我们给大家分享的是和弦式的 ... -
TWaver GIS制作穹顶之下的雾霾地图
2015-03-18 14:31 758“我不满意,我不想等待,我也不再推诿,我要站出来做一点什么。 ... -
TWaver HTML5之树形布局
2015-03-11 10:53 1429转眼间春节假期已经过完,作为一个职业的程序猿,不知道大家有没 ... -
TWaver 3D应用于大型数据中心(续)
2015-02-04 12:00 960在2014年11月份,我们当时发了一篇有关TWaver HT ... -
TWaver动画之雷达扫描效果
2015-01-26 14:03 1593UI和功能是好的产品的两个重要因素,很多产品往往只注重功能上 ... -
HTML5 实现Link跳线效果
2015-01-15 14:01 1009之前我们推出过Flex版 ... -
在TWaver的Tree节点上画线
2015-01-13 10:27 951论坛上有同学提出如何在tree上画引导线,之前我们Flex已 ... -
22万个木箱!TWaver 3D极限压榨
2014-12-29 11:31 899打开个门户网站都千呼万唤,我们还能期待网页上的3D技术会有 ... -
如何创建TWaver 3D的轮廓选中效果
2014-11-03 10:44 913在一般的游戏中,物体的选中效果会是这样: TWaver 3 ... -
如何创建环型、树型双层布局
2014-09-19 10:58 828TWaver的Demo中有常用的环型布局和树型布局,但是当网 ... -
服务器各项指标的图形化显示
2014-09-11 11:49 694在机房的监控时,经常需要去查看某个机柜中的某一台服务器的各项 ... -
HTML5定制全选列头
2014-09-10 14:57 717随着HTML5产品分支的不断深入使用,HTML5的需求也是越 ... -
TWaver MONO模板库新鲜出炉 精彩纷呈
2014-08-05 11:39 932MONO Design在线3D建模平台网站, www.mon ...
相关推荐
《TWaver HTML5 开发指南代码》是一份专为开发者准备的参考资料,它主要聚焦于如何利用TWaver库在HTML5环境下构建拓扑工具和机房展示应用。TWaver是一个强大的可视化框架,其核心特性是支持复杂的图形和网络图表的...
标题中的"twaver-html5-5.9.0-api_html5_-5.9.0-api_twaver_"似乎是指一个基于HTML5的Twaver版本5.9.0的应用程序接口(API)文档。Twaver是一个强大的数据可视化和网络建模工具,广泛应用于网络拓扑、流程图、组织...
TWaver HTML5是一套基于HTML5的图形组件库,它提供了一整套用于构建网络拓扑图、树形结构、表格和图表等功能丰富的组件,广泛用于网络监控、网络管理、数据可视化和分析等场景。开发指南详细介绍了TWaver HTML5的...
Twaver学习案例的例子
TWaver的图形组件库中提供了拓扑组件、地图组件、设备图组件,以及表格、树图、属性表、图表等丰富的通用图形界面组件,为电信运营支撑系统(OSS)的开发提供“一站式”的组件产品和解决方案,是快速设计、开发和...
- "h5":HTML5,说明这个3D图形组件是基于HTML5标准的,具备良好的跨平台性和现代浏览器兼容性。 - "3d":表示3D图形技术,暗示TWaver库支持创建三维视觉效果。 【核心知识点】 1. **TWaver库**:TWaver是一个强大...
### Twaver Web SVG 开发说明文档 #### 一、前言 Twaver Web SVG 开发说明文档是一份针对电信网管 WEB 模式开发的重要参考资料。该文档详细介绍了 Twaver Web SVG 的架构、开发流程以及常见问题解决方案等内容,...
5. **报警系统模拟**:“alarm”可能是一个具体的应用场景,展示如何使用twaver.js来设计和实现报警系统的图形界面,包括节点的状态变化、事件响应等。 6. **交互操作**:学习如何利用twaver.js库实现图形元素的交互...
【标题】"twaver拓扑" 是一个基于HTML5技术的图形化工具,主要用于创建和展示复杂的网络拓扑结构。这个工具提供了丰富的图形类型,能够适应多种应用场景,如IT网络架构、工业控制系统、流程图等。它允许用户通过图形...
TWaver组件家族包括TWaver Java、TWaver Web、TWaver Flex、TWaver .NET、TWaver HTML5和TWaver GIS,覆盖了多种开发环境。本文主要讨论的是在Flex环境下的TWaver组件——TWaver Flex。 在配置TWaver Flex的开发...
TWaver Java提供了多种图形组件,包括但不限于网络、树形、表格、树表、属性表单、列表和图表组件,以及一个数据管理框架,用于处理和展示各种数据结构。这些组件和框架共同构成了TWaver的核心功能,使开发者能够...
- TWaver支持多种技术和平台,包括**Java**、**Flex**、**.NET**、**HTML5**和**Android**等。 - 这种跨平台的支持意味着TWaver可以被集成到不同的应用场景中,无论是桌面应用、Web应用还是移动应用,都能找到合适的...
TWaver HTML5(以下简称TWaver)使用HTML5技术和javascript语言,可在支持HTML5的浏览器上进行绘图。 使用TWaver前,需熟悉几个基本概念:图元(Element)、容器(DataBox)和画布(Network)。 图元:图形中的...
5. `javadoc`:这个目录下是TWaver库的Java文档,详细解释了每个类、接口和方法的功能和用法,对开发者理解和使用TWaver的API非常有帮助。 6. `src`:源代码目录,可能包含了示例代码或者TWaver的部分源码,供...
9. javadoc:Java文档目录,通常生成自源代码,提供了TWaver库的API详细说明,包括方法、类和接口的描述,是开发者编程的重要参考资料。 总结起来,"TWaver-java-4.1最新 官网试用版jar包及Demo"是一个专注于图形...
5. JSON或其他数据格式文件:可能包含示例数据,用于填充和更新图形。 6. 示例数据:可能包含用于演示的网络拓扑数据或其他结构化信息。 7. README或文档文件:提供关于如何运行和理解源码的指南。 通过研究这个...
4. **文档**:可能包含PDF或HTML格式的用户手册、API参考等,帮助开发者理解Twaver的类结构和方法,以及如何有效地使用它们。 5. **示例数据**:为了展示图表的构建和数据绑定,可能会提供一些示例数据文件,如XML或...
即使是在极端情况下(如连接比例达到5:1),Twaver Java仍能保持较高的响应速度和稳定性,证明其在网络通信方面具有出色的技术优势。 #### 结论 通过对Twaver Java在不同节点和连接情况下的性能测试,我们可以得出...