客户常常提到思维导图,喜欢它的结构展示方式,和交互的友好,从图论的角度看,思维导图本质上是一种树,有一个根节点(主题)出发,联想到其他话题,于是分支开花,再分支,有时候也会构成网络结构,由子分支联想到另一个已有分支,但通常不破坏原有结构,常见的思维导图如下

XMind制作的思维导图

使用HTML5制作思维导图应用

这里需要用到一款HTML5图形组件-Qunee for HTML5,Qunee组件本身支持树形布局,所以对于思维导图的大体结构是可以呈现的,到细节的地方就比较多了,包括线条的走向,节点的样式,布局交互,自动吸附,双击编辑等等,本示例没办法面面俱到,所以参照XMind的效果,只实现了部分功能,供用户参考和扩展

连线定制

默认连线为直线,通过定制EdgeUI可以实现曲线效果

function FlexEdgeUI(edge, graph){

Q.doSuperConstructor(this, FlexEdgeUI, arguments);

}

FlexEdgeUI.prototype = {

drawEdge: function(path, fromUI, toUI, edgeType, fromBounds, toBounds){

var from = fromBounds.center;

var to = toBounds.center;

var cx = (from.x + to.x) / 2;

var cy = (from.y + to.y) / 2;

path.curveTo(from.x, cy, cx, to.y);

}

}

Q.extend(FlexEdgeUI, Q.EdgeUI);

使用方式

通过图元的#uiClass属性,与定制的EdgeUI相关联

function createEdge(name, from, to){

var edge = graph.createEdge(name, from, to);

edge.uiClass = FlexEdgeUI;

}

曲线效果

定制弯曲连线效果

布局定制

Qunee提供的树形布局非常强大,这里不需要太多设置就可以完成类似思维导图的布局,下面的代码设置了布局过滤器,用于控制某些节点不参与布局,代码中的控制逻辑是分离图元不参与布局,这样当图元脱离思维导图树时,将不参与自动布局处理

var layouter = new Q.TreeLayouter(graph);

layouter.isLayoutable = function(node, from){

return node == ROOT || node.host != null;

}

layouter.vGap = 20;

下面的代码,设置主节点的布局类型为两边分布,方向为居中

ROOT.parentChildrenDirection = Q.Consts.DIRECTION_MIDDLE;

ROOT.layoutType = Q.Consts.LAYOUT_TYPE_TWO_SIDE;

布局效果如下

树形布局效果

交互定制

交互定制相对复杂些,包括拖拽过程中的动态连接以及双击编辑等

动态连接效果

需要判断何时脱离,何时连接,寻找合适的连接对象,下面是拖拽交互代码,监听节点拖拽事件,动态查找就近的连接节点,具体的代码请参看http://demo.qunee.com/#Mind Mapping Demo

graph.interactionDispatcher.addListener(function(evt){

if(evt.kind == Q.InteractionEvent.ELEMENT_MOVING && evt.data){

var node = evt.data;

var host = findNearNode(node);

if(node.host == host){

return;

}

if(node.host){

unlinkToParent(node);

}

if(host){

linkToParent(node, host);

}

}else if(evt.kind == Q.InteractionEvent.ELEMENT_MOVE_END && evt.data){

layouter.doLayout();

}

})

双击编辑

双击编辑用到LabelEditor类,监听Graph组件的双击事件,当双击节点时,显示文本编辑框

graph.ondblclick = function(evt){

var element = graph.getElementByMouseEvent(evt);

if(element){

var xy;

if(element instanceof Q.Node){

xy = graph.toCanvas(element.x, element.y);

xy = localToGlobal(xy.x, xy.y, graph.html);

}else{

xy = getPageXY(evt);

}

labelEditor.startEdit(xy.x, xy.y, element.name, graph.getStyle(element, Q.Styles.LABEL_FONT_SIZE), function(text){

element.name = text;

});

return;

}

var xy = graph.getLogicalPointByMouseEvent(evt);

var newItem = createText("新项目", xy.x, xy.y);

graph.selectionModel.select(newItem);

}

html5脑图_使用HTML5技术绘制思维导图相关推荐

  1. 关于主机的思维导图_送给孩子最好的思维导图课程

    思维导图寒假班来了 1关于思维导图思维导图是一种简单而有效的图形思维工具,主要元素包含图形.线条.关键字.颜色,配合下图,我们能理解思维导图利用了左脑和右脑的工作机理,能够充分调动大脑的分析推理和想象 ...

  2. 大数据时代第一部分思维导图_大数据时代总结思维导图模板分享

    现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物.数据涉及了方方面面,那主要介绍哪些呢?下面是分享的大数据时代思维导图模板 ...

  3. 数学史思维导图_【学科活动】思维导图展风采,数学文化提素养——庆云县第四中学(北校区)四年级数学组活动小记...

    思维无限 导我所想 思维的火花跨越时空,照亮昨天.今天和明天.人类从茹毛饮血.采集狩猎到今天足不出户购遍全球,人工智能.大数据信息处理融入每个人的生活.这其中,最大的改变就是思维方式的改变. --题记 ...

  4. 如何使用思维导图做计划?这样绘制思维导图的方法你使用过吗?

    用思维导图做计划确实是比较快捷高效的,不仅带来了帮助,还给大家的工作,生活,学习等带来了很多乐趣,下面结合小编应用思维导图的经历给大家讲解绘制思维导图做计划的操作技巧,希望对大家有所帮助. 绘制工具- ...

  5. 介绍一个产品的思维导图_产品运营怎么使用思维导图?四个方面阐释思维导图的运用...

    思维导图,作为一个工具而言,目前关于它的使用已经深入到各行各业中,就以互联网和软件工程来说,思维导图就常出现在:需求访谈,需求分析,概要和详细设计等环节,作为设计辅助手段使用. 它也经常出现在各类会议 ...

  6. 思维导图模板合集及绘制思维导图方法介绍

    思维导图的绘制除了手绘思维导图对框架进行搭建使用之外,还可以选择套用模板进行编辑使用,这两种方法使用起来都很方便并且操作简单,下面是分享的思维导图模板合集以及利用迅捷画图在线网站编辑思维导图操作方法介 ...

  7. 如何思维导图的优缺点是什么绘制思维导图?

    思维导图是围绕中心主题进行搭建的框架结构,里面的内容是所拓展的长尾关键词,通过对思维进行发散,达到全方位解析的效果,从而可以很好的进行使用,但是每一件东西都有优缺点,下面来看看吧. 思维导图的优点: ...

  8. c++思维导图_必看|用好思维导图,别神话思维导图

    不知不觉,时间已经划至5月中旬,20级的萌新们也从当初的"小白"不断进阶,化身老司机指日可待~ 相信从备考到现在,各位一定对"思维导图"这四个大字都听倦了!不管 ...

  9. 介绍一个产品的思维导图_产品经理可以用思维导图做什么?

    每一位产品经理,手上会的软件工具想必都是非常多的.思维导图软件应该也是产品经理都十分依赖的工具.思维导图可以帮助产品经理梳理多而乱的产品思路,也可以帮助产品经理进行需求管理.产品分析等.本文就来聊一聊 ...

最新文章

  1. C#中控制窗体的显示与隐藏
  2. Thymeleaf中使用if和unless实现状态的判断显示达到if-else逻辑判断的效果
  3. VTK修炼之道78:交互与拾取_点拾取
  4. Installation error: INSTALL_FAILED_UID_CHANGED 的解决办法
  5. python-global全局变量
  6. python小案例_Python的应用小案例
  7. Cocos2D v2.0至v3.x简洁转换指南(一)
  8. oracle数据库配置管理,Oracle配置管理
  9. 毫秒级百万数据分页存储过程(mssql)
  10. 2013年1月第1个周末
  11. iphone8强制重启进入恢复模式进入DFU模式[2021-11-05]
  12. JAVA制作游戏脚本(1)---Robot机器人
  13. 转录组RNA-seq分析前沿进展综述
  14. 彼得•林奇基层调查选股法(GARP股票投资策略)
  15. 华为ne20路由器登陆密码_很好的文章,主要是关于密码学和NE的基础知识
  16. 项目质量管理__七种基本质量工具__老七工具和新七工具
  17. python进阶练习题:IRR计算 - 盈利能力的评价【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  18. golang panic和recover
  19. C语言练习——提高篇
  20. 芯片丨美光最新财报电话会议透露了三个重要观点

热门文章

  1. 等了3个月终于来啦!传智播客C/C++视频教程开始更新喽~
  2. 电脑视频加水印软件 视频消重
  3. 想了解视频加水印软件哪个好?这2个实用的软件分享给你
  4. Apache Calcite入门
  5. 技术分享:2.0mm小间距多接枝刚挠结合板制作工艺研究
  6. 《Windows 程序设计(第3版)》——6.7 【实例】窗口查看器
  7. 计算机本科毕业论文要求,计算机科学与技术学院本科毕业设计(论文)规范(试行)...
  8. 计算机毕业设计-springboot企业考勤管理系统(前后端分离)员工考勤管理系统-公司日常管理系统java代码
  9. laravel中外部定义whereIn的用法和where中使用in
  10. mac 如何快速生成SSH key,配置github SSH公钥连接(解决git push 413问题)