javascript - mousedown 内的 mousemove 停止鼠标弹起

标签 javascript d3.js mouseevent

我在按住鼠标的同时捕获 SVG 组 ( <g>) 中的鼠标位置。

然而,mousemove在释放鼠标按钮和任何附加 mouseup 的尝试后继续触发事件被忽略。

var ternary = d3.select("#ternary");

var pointer;
var selector = ternary.append("g");

selector.on("mousedown", function() {
  console.log('down');

  selector.on("mousemove", function() {
    console.log('move');
    var mouse = d3.mouse(this);
    console.log(mouse[0])
    console.log(mouse[1]);
    // continues firing after mouse button released 
    // how do I clear?
  });

  selector.on("mouseup", function() {

    alert('release');
    //this event doesnt fire
  });
});

最佳答案

两个注意事项:

  1. A <g>元素,作为一个容器,将采用其内容的大小,这些内容负责鼠标事件;
  2. mouseup确实会触发,正如您在此处看到的(仅将 <g> 更改为 <svg> ):

var selector = d3.select("svg");

selector.on("mousedown", function() {
  console.log('down');

  selector.on("mousemove", function() {
    console.log('move');
    var mouse = d3.mouse(this);
    console.log(mouse[0])
    console.log(mouse[1]);
    // continues firing after mouse button released 
    // how do I clear?
  });

  selector.on("mouseup", function() {

    alert('release');
    //this event doesnt fire
  });
});
svg {
  background-color: tan;
}
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>

因此,您在这里只有一个可回答的问题:[mousemove] 在鼠标按钮释放后继续触发,我该如何清除 [it]?”

只要通过null到事件处理程序:

selector.on("mousemove", null);

这是演示:

var selector = d3.select("svg");

selector.on("mousedown", function() {
  console.log('down');

  selector.on("mousemove", function() {
    console.log('move');
    var mouse = d3.mouse(this);
    console.log(mouse[0])
    console.log(mouse[1]);
    // continues firing after mouse button released 
    // how do I clear?
  });

  selector.on("mouseup", function() {

    selector.on("mousemove", null);

    alert('release');
    //this event doesnt fire
  });
});
svg {
  background-color: tan;
}
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>

关于javascript - mousedown 内的 mousemove 停止鼠标弹起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030049/

相关文章:

Javascript 倒计时与 php 的错误计算

javascript - 无法加载 c++ bson 扩展

JavaScript。等待嵌套的获取 promise

javascript - 超出最大调用堆栈大小 - Connected React Component

javascript - D3 中的饼图( donut )图段顺序

java - 在 JavaFX 中使用 onMouseEntered 事件重新填充 SVG 路径

events - Google Maps API v3 'dragend' 事件在 map 完成滑动之前触发

c# - Hook 第三个 X 鼠标按钮?

javascript - 创建将两个文件中的数据与公共(public)列组合在一起的映射 - 但数据不一对一匹配

javascript - 在 D3 中对齐轴