Подтвердить что ты не робот

D3 координаты клика относительно страницы не svg - как их перевести (ошибка Chrome)

Когда событие находится в игре, d3.event.x дает положение координаты x щелчка мыши, но относительно всего HTML-документа. Я попытался использовать jQuery $('svg'). Position(), чтобы получить фактическую позицию svg, но это возвращает вопиющие ошибочные значения.

Есть ли простой способ найти позицию svg относительно страницы, которую я пропускаю? Я использую Chrome, кстати, в случае, если проблема jQuery является непонятной ошибкой браузера.

EDIT: я проверил это в firefox и $('svg'). position() возвращает правильные координаты.?!?

4b9b3361

Ответ 1

Вместо d3.event, который является родным событием браузера, используйте d3.mouse, чтобы получить координаты относительно некоторого контейнера. Например:

var svg = d3.select("body").append("svg")
    .attr("width", 960)
    .attr("height", 500);

var rect = svg.append("rect")
    .attr("width", "100%")
    .attr("height", "100%")
    .on("mousemove", mousemove);

function mousemove(d, i) {
  console.log(d3.mouse(this));
}