SVG文字交互区域的制作注意

在很多情况下,我们使用d3(或者其他SVG类库)创建交互式图表时,都需要将html元素插入到SVG元素上。典型的例子,就是图表中有需要交互式修改文字的地方,当用户点击了某个svg text元素,这里我们需要将一个html元素 input“放进”SVG元素中,并在这个input元素上绑定事件,从而快速更改文字。而svg本身元素类型是提供不了类似的功能的,所以用到html元素是必须的。

SVG元素主要有如下几类:svg(定义svg文档片段), rect(定义矩形), circle(定义圆形),ellipse(定义椭圆),path(路径),line(线),ploygon(多边形),text(文字),title(标题), desc(描述), g(群组), defs(参考元素), image(图片元素)。详见:http://www.w3school.com.cn/svg/svg_reference.asp

但是,直接将html元素插入SVG元素内是不可以显示的。

如下例,使用d3js设置text元素是可以显示的,但是如果把插入的元素改为div,则div元素虽然可以创建,但是不可见。

JavaScript

node.append("text")

.attr("dx", 16)

.attr("dy", ".0em")

.text(function(d) { return d.name });

1

2

3

4

node.append("text")

.attr("dx",16)

.attr("dy",".0em")

.text(function(d){returnd.name});

html object in SVG

这是使用SVG绘图时经常遇到的问题。有两个解决办法:

1.将div使用SVG元素foreignObject包裹。

这个办法的好处是,通过foreignObject,可以将div元素嵌入SVG片段来处理。详见:http://ajaxian.com/archives/foreignobject-hey-youve-got-html-in-my-svg.

但是此方法不兼容IE任何版本,详见https://developer.mozilla.org/zh-CN/docs/Web/SVG/Element/foreignObject

2.将div定义为浮动层,然后使用left, top属性,等计算位置。

用这种方法制作文字提示框,就像这样:

JavaScript

d3.select("#nytg-tooltip").style('top',ypos+"px").style('left',xpos+"px").style('display','block');

1

d3.select("#nytg-tooltip").style('top',ypos+"px").style('left',xpos+"px").style('display','block');

这个方法比起第一种,在位置计算上复杂度是一样的。并且浮动的div更容易控制。具体而言这有一个案例:

结论:

对于要进行交互操作的文字区域,通常要借助html元素的力量来实现效果。将html元素加入SVG有两种方法,其一是将div使用SVG元素foreignObject包裹,其二是将div定义为浮动层,然后使用left, top属性,等计算位置。

这里还要特别提到一个案例:在线思维导图软件mindmo也是这样处理文字区域的交互问题的。它将所有的节点文字区域都用浮动的div显示,使用top,left属性来控制其位置;而svg只用于路径显示。例如:https://www.mindomo.com/mindmap/cd8215d5e5b1427c9c22b4abc6aae5d6

html svg矩形添加文字,SVG文字交互区域的制作注意:html object in SVG相关推荐

  1. php中怎么给文字加颜色,PHP水印类,支持添加图片、文字、填充颜色区域的实现...

    *自己整理的一个水印类* 支持添加图片.文字.填充颜色区域 /** * 图片加水印类,支持文字水印.透明度设置.自定义水印位置等. * 使用示例: * $obj = new WaterMask($im ...

  2. 图片添加边框和文字怎么弄?图片编辑在线教学

      大家平时在拍完照片后,会对它进行一些编辑处理吗?像我每次拍完照,都会对图片进行一些后期处理,有时也会给图片添加一些边框或者文字,美化图片并增加图片信息量.那你们平时都是怎么给图片加上边框和文字的呢 ...

  3. php 图片填充图片,PHP水印类,支持添加图片、文字、填充颜色区域的实现_php实例...

    下面小编就为大家带来一篇PHP水印类,支持添加图片.文字.填充颜色区域的实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 *自己整理的一个水印类* 支持添加图片.文字 ...

  4. php制作白色背景图加字,PHP实现水印类,支持添加图片、文字、填充颜色区域

    本篇文章主要介绍PHP实现水印类,支持添加图片.文字.填充颜色区域,感兴趣的朋友参考下,希望对大家有所帮助. *自己整理的一个水印类* 支持添加图片.文字.填充颜色区域 /** * 图片加水印类,支持 ...

  5. svg.draggable.js 实现动态向svg中添加图形和图片并可以拖拽

    源码: <!doctype html> <html> <head><meta charset="utf-8"><title&g ...

  6. jupyter添加标题、文字注释

    转载:jupyter添加标题.文字注释 本文将分上下两部分简单介绍Jupyter notebook的入门教程,英文原文出处: Getting started with the Jupyter note ...

  7. android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, ...

  8. 趣学python3(2)-添加以数字文字形式使用下划线的功能,以提高可读性

    添加以数字文字形式使用下划线的功能,以提高可读性 x=2_111_222 y=0x_fff_6da print(x) print(y) 2111222 16774874

  9. php背景图添加字,怎样给视频后面加背景图 视频加背景图片并添加一行广告文字...

    有不少广告小视频中,视频画面是一张海报背景图片,图片上显示一个小视频播放,并且在画面上还有显示一行广告字幕.这样的宣传视频制作其实蛮简单的,怎样给视频后面加背景图片的方法倒是挺多,要给视频加背景图片的 ...

最新文章

  1. K-BERT | 基于知识图谱的语言表示模型
  2. Android操作系统11种传感器介绍
  3. 奥鹏C语言专科在线作业答案,奥鹏13春电子科大《C语言(专科)》在线作业3答案...
  4. IT职场的一些处事之道
  5. 一个简单的Blob存取例子
  6. matlab 信道模拟 差错概率,移动信道差错序列的分布概率模拟法及门限电平的讨论...
  7. 2011对于运维的思考
  8. James McCrae
  9. Swift 5.0 值得关注的特性:Handle unknown values using @unknown default
  10. python单位转换编程_[转]Python编程FAQ
  11. 计算机二级 office 英语,计算机二级office题库及答案
  12. MyEclipse10破解过程
  13. 在智能家居音箱领域上的音频功放芯片IC
  14. Fluent 湍流非预混燃烧模拟
  15. 【第19天】内涵深厚才能妙语连珠
  16. 老旧笔记本安装openwrt实践:
  17. 我是如何把python爬虫获取到的数据写入Excel的?
  18. Rstudio(4.0.5 )安装Rtool40
  19. js实现点击按钮使图片排序
  20. 知名硅谷黑客当街被刺身亡!年仅43岁,马斯克都怒了

热门文章

  1. win10 gtx1660ti 配置vs opencv cuda加速
  2. 第一波瓜果盲盒发出去了,我有太多话要说!
  3. transaction、Conference、Workshop的区别
  4. 掌控板+麦轮,Mixly + Blynk,让你的麦轮战甲嗨炸全场!
  5. 60后水果店老板做微信营销
  6. Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)
  7. oracle imp ora 00959,如何IMP存储在多TABLESPACE上的对象(IMP-00003 和 ORA-00959 问题的对应)...
  8. SAP FICO未清账和已清账的区别解释
  9. 哪里可以查询网站ALEXA排名? ALEXA排名意味着什么?
  10. 《css基础知识》——案例:淘宝首页的登录界面