的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