添加视图框时更改鼠标位置
Change in mouse position when viewbox is added
我目前正在学习和使用JavaScript和SVG,而且我是新手。这是我的场景
我有一个div,里面有一个SVG
<div id "O_div">
<svg>
<line x1= "0" x2 = "0" y1 ="0" y2 ="0">
</line>
<svg>
</div>
现在我想知道鼠标相对于div的位置,所以我写了以下代码
odiv = document.querySelector('#O_div');
XOffset = $(Odiv).position().left;
YOffset = $(Odiv).position().top;
// And on my mouse move event
$('#O_div').mousemove(function(event) {
var mouseX = event.clientX - XOffset;
var mouseY = event.clientY - YOffset;
// Here I am setting my line x and y coordinate equal mouseX and mouseY
//So that line moves according to mouse move movement.
});
它运行良好。但是,当我使用query resizable向div添加调整大小功能时,问题就出现了。为了调整svg的大小,我在其中添加了一个viewBox选项。现在我的svg看起来像这个
<svg viewBox="0 0 450 154" preserveAspectRatio="xMinYMin meet">
</svg>
但现在我的鼠标坐标工作不好,我的线离鼠标有点远,当我增加div大小时,它离鼠标更远。当我的svg中有一个viewbox选项时,有人能指导我如何计算偏移位置吗。
感谢您的帮助和指导,我们将不胜感激。
如果您有一个viewBox,那么您需要记住鼠标事件在客户端坐标系中提供值,而不是通过viewBox建立的坐标系。这篇博客文章可能有助于解释这一点,这里有一个例子。
简而言之,要获得当前用户空间中的坐标,您需要做的是:
var m = El.getScreenCTM();
// note: assumes the root is an <svg> element, replace
// document.documentElement with your <svg> element.
var p = document.documentElement.createSVGPoint();
p.x = evt.clientX;
p.y = evt.clientY;
p = p.matrixTransform(m.inverse());
变量p现在将包含元素El的用户坐标系中的鼠标位置。
相关文章:
- 跟踪jqplot垂直折线图的鼠标位置
- Javascript-在视频中跟踪鼠标位置
- 打开相对于鼠标位置的CSS3/HTML5模式对话框
- 如何控制quadraticCurve使用鼠标位置控制位置
- Javascript如何在不使用画布的情况下获取鼠标位置
- jQuery根据鼠标位置计算DIV偏移量和边界
- 在火狐浏览器的画布上获取鼠标位置
- 尝试绘制从鼠标位置工具栏中选择的形状 - HTML5 CANVAS
- 添加视图框时更改鼠标位置
- 如何在鼠标位置获取所有元素
- Three.js 3D缩放到鼠标位置
- 将鼠标位置(0,0)设置为画布的中心
- Unity 2d实例化鼠标位置问题,请告知
- 在原生JavaScript中获取画布中鼠标位置的最现代方法
- 如何在 Javascript 中正确获取鼠标位置
- 如何将元素移动到鼠标位置
- 使用 JavaScript 跟踪 Adobe Air 中的鼠标位置
- 三.js - 对象跟随鼠标位置
- 绘制在鼠标位置折叠的水平线和垂直线
- 在鼠标按下期间获取鼠标位置