的jsfiddle鼠标位置:http://jsfiddle.net/az6Ug/SVG如何获得内部基质
使用Snap.svg库,我想对SVG的阻力,让鼠标的位置。我需要在内部矩阵上的鼠标位置,而不是浏览器的鼠标位置。 我有这个问题的工作,这是如果SVG所属的窗口上有任何滚动,计算出的鼠标位置被滚动条上的滚动量偏移。
例如,没有滚动,然后它工作正常。或者在滚动条上有10px的垂直滚动,鼠标位置计算为:true position + 10px。 如果有任何水平滚动,这是相同的交易:由滚动量抵消。
在jsFiddle中,我使用矩形在拖动时显示计算的鼠标位置。 正如你所看到的,如果没有滚动,那么矩形会保持鼠标光标(左上角)。但是用一些滚动,矩形偏离鼠标光标。
尽管我使用的是Snap.svg库,但我只用它来获取拖动事件,鼠标计算是纯Javascript。一个可能的解决方案是通过滚动量减去X和Y,但我认为使用SVG的变换函数会有更好的方法。
var S;
var pt;
var svg
var box;
window.onload = function(){
svg = $('#mysvg')[0];
S = Snap(svg);
pt = pt = svg.createSVGPoint(); // create the point
// add the rectangle
box = S.rect(10, 10, 50, 50);
box.attr({ fill : 'red', stroke : 'none' });
S.drag(
function(dx, dy, posX, posY, e){
//onmove
pt.x = posX;
pt.y = posY;
// convert the mouse X and Y so that it's relative to the svg element
var transformed = pt.matrixTransform(svg.getScreenCTM().inverse());
box.attr({ x : transformed.x, y : transformed.y });
},
function(){
//onstart
},
function(){
//onend
}
);
}
感谢您的回复......这在Chrome中可用,但不适用于Firefox。在FF中,'S.node.offsetLeft'是未定义的。 – ServerBloke
已经更新了我认为更适合的替代方案,该方案也适用于FFX。 – Ian