javascript - 影响 d3.mouse 点的父 css 变换

标签 javascript d3.js svg mouseevent transform

我正在使用第三个库,它添加了“transform: translate3d(200,0,0);”到父元素。所以 svg 中的元素倾向于向右移动。对于拖放事件,设置原点就足够了,但我无法更正 d3.mouse(this)。

我已经为这个例子创建了一个 jsfiddle:http://bl.ocks.org/hlucasfranca/f133da4493553963e710

jsFiddle:https://jsfiddle.net/rahpuser/5jp6123u/

所以,当点击而不对父级应用转换时,一切正常,但是当父级有转换时,d3.mouse 返回一个错误的数字

var coords = d3.mouse(this);
coords[0] === 100; //true without transform..
coords[0] === 300; // true when the transform to the parent is applied.
// the values are not precise but you can verify the behavior in the jsfiddle
  1. 为什么 d3.mouse(this) 不能得到正确的值?

我的理解是 d3.mouse 应该根据容器 this ( svg ) 获取坐标。

  1. 我应该怎么做才能修复让父级保持新转换的行为?

谢谢。

更新:

不适用于 Firefox 46 for ubuntu

在 chrome 和 opera 中工作良好

最佳答案

如您所见,这是一个已知的 FireFox 错误。即使您确实修复了 FireFox,传播也需要一些时间,而且永远不会向后修复。所以您仍然需要解决方法。

你可以做的一件事——只要 SVG 的左上角始终位于其包含的 div 的 0,0 坐标(就像你的 jsFiddle 的情况一样)——替换对 d3.mouse 的调用(这个) 与:

d3.mouse(this.parentNode)

这将从 SVG 的父级获取鼠标坐标,这是一个普通的 div,因此显然它不受此错误的影响,并且会在所有平台上为您提供所需的值。

这不能解决根本问题(例如 getClientBoundingRect 仍会返回错误的值),但它可以解决您的特定问题。

关于javascript - 影响 d3.mouse 点的父 css 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666242/

相关文章:

javascript - 将 d3 地理图 block 中的缩放限制为 'maximum'

javascript - 点沿路径插值平移函数

.net - 哪个 C# 库允许可靠的 SVG 到 PDF 转换?

MATLAB:如何不将绘图轴外的数据导出到 SVG

javascript - 如何在 d3js 中指定 x 轴上的时间刻度刻度?

javascript - 捕获 SVG 元素圆上的更改并通过 js 更改其他位置的属性

javascript - react /JSX : Iterating through an object with key/value pairs

javascript - 使用 javascript 动态创建文本框并将该文本框值插入到 mysql 中

javascript - 平滑滚动到哈希时如何停止丢失正确的位置/URL

javascript - 阻止加载 JS 文件的弹出窗口