D3中的鼠标位置

I3i*_*3i0 46 javascript d3.js

我只想使用以下代码使用D3获取鼠标位置:

var x = 0;

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

但我总是得到x = 0!通过使用x,我可以看到0值正在内部改变,console.log()但是x它的启动值= 0.

如何保存该function()值并在以后的应用程序中使用它?

Sud*_*han 77

你必须使用一个数组.这将存储xy喜欢:

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
Run Code Online (Sandbox Code Playgroud)

  • 在 d3 版本 6 中,您需要调用 d3.pointer 而不是 d3.mouse。 (8认同)
  • 为了澄清一点,你需要调用 d3.pointer(event) 而不是 d3.mouse(this) (2认同)
  • 具体来说,您需要“d3.pointer(event)”,其中“event”是鼠标移动回调的第一个参数。 (2认同)

小智 14

你可以通过这个例子很好地理解点击和拖动功能.希望它会有所帮助..

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

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

  • 脚本中的语法错误。最新的Firefox,小提琴甚至没有启动。 (2认同)

duh*_*ime 10

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
    });
Run Code Online (Sandbox Code Playgroud)

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
    });
Run Code Online (Sandbox Code Playgroud)


小智 7

如评论以上chkaiser作曲家的方法是在版本6不同;

var coordinates = d3.pointer(this);
var x = coordinates[0];
var y = coordinates[1];
Run Code Online (Sandbox Code Playgroud)
var svg = d3.select('body').append('svg')
    .attr('width', 600)
    .attr('height', 600)
    .on('mousemove', (event) => {
      var coords = d3.pointer( event );
      console.log( coords[0], coords[1] ) // log the mouse x,y position
    });
Run Code Online (Sandbox Code Playgroud)

更多细节@ D3 v6 迁移指南