SVG元素在转换后会丢失事件侦听器
SVG elements lose event listeners after transform
当以编程方式更改父<svg>
转换属性时,我得到了内部SVG元素的一些奇怪行为。更改后,css选择器(如:hover
)和javascript侦听器(onClick
)都无法工作。
这里有一个例子:
-
包含
<circle>
元素的简单<svg>
:<svg width="200" height="200"> <circle cx="30" cy="30" fill="white" stroke="black" stroke-width="1" r="20" onClick="alert('clicked')"> </circle> </svg>
-
每次点击窗口后更新
<svg>
转换属性的JS代码:var svg = document.getElementsByTagName('svg')[0] var x = 0 window.onclick = function() { svg.setAttribute('transform', 'translate(' + x + ',' + x + ')') x += 3 }
https://jsfiddle.net/ohpaaevt/6/
有人能解释一下吗?
EDIT:我刚刚注意到在<svg>
上应用transform属性甚至在Chrome上都不起作用,只在Firefox上起作用。尚未使用其他浏览器进行测试。
<svg>
元素上的转换是SVG 2的一个新功能,只有Firefox实现了它。在SVG 1.1中,<svg>
元素不支持具有转换属性。
SVG 2是一个新规范,目前尚未完成。Chrome、Firefox和IE Edge已经实现了它的不同部分
为了解决Chrome中缺乏支持的问题,请创建<svg>
的<g>
子级,并将<svg>
的所有内容移动到<g>
元素中,然后转换<g>
元素而不是<svg>
元素。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- ng更改事件不适用于Dropdown