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

Положение мыши в D3

Я просто хотел получить положение мыши, используя D3, используя следующий код:

var x = 0;

svg.on('mousemove', function () {
   x = d3.mouse(this)[0];         
});

но x всегда равен 0. Используя console.log(), я вижу, что значение x изменяется только внутри function() но из него x получает свое начальное значение 0.

Как я могу сохранить значение x и использовать его позже в моем приложении?

4b9b3361

Ответ 1

Вы должны использовать массив. Это будет хранить x и y как:

var coordinates= d3.mouse(this);
var x = coordinates[0];
var y = coordinates[1];

// D3 v4
var x = d3.event.pageX - document.getElementById(<id-of-your-svg>).getBoundingClientRect().x + 10
var y = d3.event.pageY - document.getElementById(<id-of-your-svg>).getBoundingClientRect().y + 10

Ответ 2

Вы очень хорошо понимаете функцию щелчка и перетаскивания в этом примере. Надеюсь, это поможет.

 var point = d3.mouse(this)
  , p = {x: point[0], y: point[1] };

http://jsfiddle.net/mdml/da37B/

Ответ 3

V3:

var svg = d3.select('body').append('svg')
    .attr('width', 600)
    .attr('height', 600)
    .on('mousemove', function() {
      console.log( d3.mouse(this) ) // log the mouse x,y position
    });

V4 и V5:

var svg = d3.select('body').append('svg')
    .attr('width', 600)
    .attr('height', 600)
    .on('mousemove', function() {
      console.log( d3.event.pageX, d3.event.pageY ) // log the mouse x,y position
    });

Ответ 4

Я подозреваю, что вы можете попробовать что-то вроде:

var x = 0;

svg.on('mousemove', function () {
   x = d3.mouse(this)[0];         
});

console.log(x);

Если у вас нет супер быстрых рук, это всегда будет записывать "0" на консоль, потому что весь script выполняется, пока вы достигаете мыши. Попробуйте поместить свой фрагмент непосредственно в консоль, передвиньте мышь и введите "x" в консоль. Вы должны увидеть последнее значение x.

Надеюсь, это поможет, но я, возможно, неправильно понял этот вопрос.