2014-12-11 12 views
8

Chcę uzyskać współrzędne kliknięcia myszą na prostokątnym kształcie svg. Próbuję wydrukować współrzędne kliknięcia myszką na konsolę.Uzyskuj współrzędne kliknięcia myszą na svg przy użyciu d3

Mogę użyć pageX i pageY, aby uzyskać współrzędne, ale dotyczy to całej strony. Potrzebuję tylko współrzędnych wewnątrz svg.

Używam d3.v3.min.js

Tak próbowałem:

$(document).mousedown(function() { 
    console.log(d3.mouse(this)); 
}); 

pojawia się błąd:

Uncaught TypeError: Cannot read property 'sourceEvent' of null

ja też próbowałem:

$(document).mousedown(function() { 
    console.log(d3.mouse(document.getElementById("svg_id"))); 
}); 

otrzymuję ten sam błąd.

Kiedy próbuję z d3.svg.mouse(this), otrzymuję błąd:

Uncaught TypeError: undefined is not a function

Jak mogę uzyskać współrzędne kliknięcia w SVG i dlaczego są te d3.mouse() funkcje nie działa?

+0

Zastanawiasz się, czy to może pomóc .. http://stackoverflow.com/questions/16770763/mouse-position-in-d3 – Ian

+0

dzięki, ale próbuje te przykłady ja wciąż się błąd zerowy sourceEvent. – brno792

+0

Nie znam dobrze d3, ale szybkie spojrzenie na dokumenty sugeruje, że parametr powinien być kontenerem (jak element svg lub g). Nie mam pojęcia, co to jest "kształt", ale możesz to sprawdzić. W przeciwnym razie może wyskoczyć skrzypce. – Ian

Odpowiedz

12

Problem z kodem polega na tym, że zamiast obsługi zdarzeń D3 używasz obsługi zdarzeń jQuery. Chcesz coś jak następuje:

var svg = d3.select("svg"); 
svg.on("click", function() { 
    console.log(d3.mouse(svg.node)); 
}) 
+3

Aby wyjaśnić: wartości używane przez 'd3.mouse' są ustawiane przez d3 kiedy przechwytuje zdarzenie i przekazuje je do obsługi zdarzenia; więc możesz użyć tylko 'd3.event (containerElement)' w procedurze obsługi zdarzenia zarejestrowanej w metodzie d3 '.on()'. – AmeliaBR

+1

Po wielu grzebiących okazało się, że tylko 'd3.mouse (this)' działało wewnątrz funkcji 'svg.on ('click')'. –

Powiązane problemy