写在前面

申明一下,关于系列五的前4篇的介绍都是基于 draw2d 的版本version 2.3.0 上的开发。

截至目前(2013/05), draw2d的最新版本已经是version 2.6.1 了。

对于tooltip 的功能,在 version 2.3.0是没有提供,但是, 在version 2.6.1已经提供了实现tooltip的方式。

实现tooltip in version 2.6.1

在没有看到实现源代码之前,以为实现方式应该是在draw2d.js 给 shape 加上一个tooltip 的属性,提供一些set 或hide 的方法 供调用。
实际看过之后才发现并非这样。先直接贴上如何实现的Source Code:

MyFigure = draw2d.shape.basic.Rectangle.extend({NAME : "MyFigure",init : function(){this._super();this.createPort("input");this.createPort("output");this.setDimension(50,50);this.tooltip = null;},/*** @method* Change the color and the internal value of the figure.* Post the new value to related input ports.* */onMouseEnter: function(){this.showTooltip();},onMouseLeave: function(){this.hideTooltip();},setPosition: function(x,y){this._super(x,y);this.positionTooltip();},hideTooltip:function(){          this.tooltip.remove();   this.tooltip = null;},showTooltip:function(){          this.tooltip= $('<div class="tooltip">Tooltip</div>').appendTo('body');this.positionTooltip();        },positionTooltip: function(){if( this.tooltip===null){return;}var width =  this.tooltip.outerWidth(true);var tPosX = this.getAbsoluteX()+this.getWidth()/2-width/2+8;var tPosY = this.getAbsoluteY()+this.getHeight() + 20;this.tooltip.css({'top': tPosY, 'left': tPosX});}});

可以发现, 实现方式其实是叠加式的, 并没有在原有的定义处进行修改, 而是提供给开发者扩展的这种方式。
继承一个shape类--》mouse enter 和 mouse leave 时打开和关闭tooltip. tooltip 的实现就是在body 页面添加一个div, 设置此div的css 样式及position.
既然是这种实现方式,则在老版本上应该依据此种方式也可以添加tooltip 了。
试了一下, 没有成功。 原因是 onMouseEnter 和 onMouseLeave 的事件触发方法没有执行。 看来要达成此效果,需要修改draw2d.js 使  shape 的mouse enter 和mouse leave的事件方法可以执行。 另外就是要加入tooltip 的 CSS了。

老版本的其他解决方案

如果使用的是draw2d 的老版本,是否有其他方式实现tooltip 的功能呢?
答案肯定是有的。
实现原理和新版本的实现应该是类似的。
介绍解决方案之前先介绍一下jQueyUI
jQuery UI - jQuery user interface , 是使用jQuery 实现的一些界面元素。
在jQueryUI 1.9 版本及以上就有tooltip 的组件。(1.8 版本及以下都没有)
看一下如何实现:

<!-- by oscar999 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Tooltip Test</title><script src="../js/jquery-1.9.1.js"></script>
<script src="../js/jquery-ui-1.10.3.custom.js"></script><link rel="stylesheet" href="../css/ui-lightness/jquery-ui-1.10.3.custom.css"><script>
$(window).load(function(){$("#div1").tooltip();
});
</script>
</head>
<body>
<div id="div1" title="This jQueryUI tooltip!">Mouse over me!</div>
</body>
</html>

实现方式是: 查找页面元素是否有title 的属性, 如果有的话, 就添加 tooltip 的div.
所以如果我们给页面的svg的figure 添加title 的属性应该就可以显示美观的tootip 了。

如果要给Rectangle 这种shape 添加 tooltip

具体需要修改:

1.  draw2d.shape.basic.Rectangle 的repaint 定义部分

新增以下部分 (定义在repaint 而不是init 的原因是 在repaint 中有使用到attributes)

attributes.title = stitle;

2. draw2d.shape.basic.Rectangle 的createShapeElement  定义部分.(此部分通过raphael 创建shape)

    createShapeElement: function () {        return this.canvas.paper.rect(this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(), null, this.getTitle());}

3. raphael 创建shape 的部分添加title 属性

    //add titlepaperproto.rect = function (x, y, w, h, r ,t) {      var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0, t || "");this.__set__ && this.__set__.push(out);return out;};
    //add titleR._engine.rect = function (svg, x, y, w, h, r, t) {var el = $("rect");svg.canvas && svg.canvas.appendChild(el);var res = new Element(el, svg);        res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000", title: t || ""};res.type = "rect";$(el, res.attrs);return res;};

[Web Chart系列之五] 5. 实战draw2d之figure tooltip 实现相关推荐

  1. [Web Chart系列之五] 4. 实战draw2d(Raphael)之取消Chrome中Label Text 全部选中

    情况描述 这里使用的是Rectangle , 里面加入一个Label 或多个Label 的组合图形. 在Chrome里拖拽图形的时候,偶尔会把所有Rectangle包含的Label 全部以深蓝色底色. ...

  2. [Web Chart系列之五] 1. 实战draw2d 之总体介绍

    draw2d 是什么? 首先需要明确的是这里指的draw2d是个什么东东? 用draw2d这个关键字,询问一下谷哥和度娘基本上会找到两个东西 一个是集成在eclipse(也可以单独使用) 里面使用SW ...

  3. [Web Chart系列之五] 6. 实战draw2d之ConnectionRouter

    前言 ConnectionRouter 的作用是定义连线的展示样式. 是直线连接还是曲线连接(好像也是基于Bezier曲线) 位于包: draw2d.layout.connection 下. 常见的有 ...

  4. [Web Chart系列之五] 3. 实战draw2d 之图形填充色(纯色 or 渐变)

    颜色渐变 draw2d 目前没有提供直接对Figure 设置渐变效果的API. 但是raphael 有提供, 这样的话基本上在draw2d实现渐变成为可能. 颜色渐变功能来源 raphael 提供的图 ...

  5. [Web Chart系列之五] 2. 实战draw2d 之Label 放大,缩小的问题(raphael的text类似问题)

    问题描述 在draw2d中使用Canvas 的setZoom function来扩大,缩小画布进而放大,缩小画布上的图形大小.(Zoom in/Zoom Out功能). 图形类型Circle, Rec ...

  6. [Web Chart系列之五] 图形布局-Circle Layout 之实现

    前言 关于Circle Layout 的基本介绍, 可以参考: [Web Chart系列之三] 图形布局-Layout 布局的现实使用状况 这里使用这种布局来布局特定对象的关联. 这里的这些对象类似于 ...

  7. [Web Chart系列之一(续)]Web端图形绘制SVG,VML, HTML5 Canvas 简单实例

    前言 本篇是继 [Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较 的补充和实例说明各种技术的使用方式. VML 的用法和实例 引入命名空间之后,就可以 ...

  8. [Web Chart系列之三] 图形布局-Layout

    前言 从上一篇: [Web Chart系列之二] 各种实现js 图表的library汇总与比较 的介绍, 目前提供提供绘制矢量图的library 还是很多的.  如果只是需要绘制一些柱状图, 饼图, ...

  9. go语言web开发系列之五:gin用zap+file-rotatelogs实现日志记录及按日期切分日志

    一,安装需要用到的库: 1,安装zap日志库: liuhongdi@ku:/data/liuhongdi/zaplog$ go get -u go.uber.org/zap 2,安装go-file-r ...

最新文章

  1. python对文件的读操作有哪些方法-Python之文件操作:文件的读写
  2. 【超级经典】程序员装B指南(转)
  3. 【Flutter】Dart 技巧 ( 独立主函数入口 | 可空类型判定 | 默认值设定 )
  4. mini CentOS7 安装 mysql
  5. 自动发现_清华发布首个自动图学习框架,或有助于蛋白质建模和新药发现
  6. slice_input_producer在2.0版本里怎么用_微信提醒对方账号异常应该怎么办
  7. [C++] Nested Radical Constant
  8. MVC应用程序实现文件库(FlexPaper)
  9. 少儿编程150讲轻松学Scratch(十一)-用Scratch巧解数学题——判定质数
  10. 妈妈培养天才的13绝招
  11. 图形学之空间坐标变化之三维图形观察及变换
  12. 一个打印有规律图形的c程序。
  13. 怎么打_这比赛怎么能够这样打?
  14. 抽屉效果_越来越多人家装了餐边柜,为什么不多加一排抽屉?很多家庭没想到...
  15. java图片处理工具类
  16. tomcat 8.0下载
  17. ToolBar修改返回按钮图标,CollapsingToolbarLayout修改文字居中
  18. c语言对数组取反,C语言中按逆取反是什么意思
  19. JavaScript常见面试题
  20. 教孩子学习乘法和除法,我算是绞尽脑汁了

热门文章

  1. ios 开发需要看的书籍
  2. 20120918-LIST类定义《数据结构与算法分析》
  3. JQuery - Ajax和Tomcat跨域请求问题解决方法!
  4. 【实践】因果推断在快手推荐场景的应用探索.pdf(附下载链接)
  5. 论文|SDNE的算法原理、代码实现和在阿里凑单场景中的应用说明(附代码)
  6. 【实践】图推荐算法在EE问题上的应用(附交流视频和PPT下载链接)
  7. python程序中的内存泄露(matplotlib内存泄漏)
  8. 全球首发!惯性导航导论(剑桥大学)第五部分
  9. 从实操教学到赛题演练,腾讯专家亲授TI-ONE平台操作攻略!
  10. 在arxiv上看到自己的投稿署了别人的名字是什么体验?