javascript - D3.js如何防止点击事件上的拖动启动

标签 javascript events d3.js click drag

我正在使用D3.js v4 库。我需要区分单击事件和拖动开始事件:如果它是单击事件,我不希望触发拖动开始。似乎也有可能相反(如果 Dragstart 被触发,则防止单击)。知道这是否可行吗?

var svg = d3.select("#svgContainer").append("svg")
  .attr("width", 100)
  .attr("height", 100);
  
var onDrag = d3.drag()
  .on("start", function() {
    $("#console").append('<p>drag-start</p>');  
    console.log("drag-start");
  })
  .on("drag", function() {
  
  })
  .on("end", function() {
  
  });
  
var box = svg.append("rect")
  .attr("x", 25)
  .attr("y", 25)
  .attr("width", 50)
  .attr("height", 50)
  .attr("fill", "orange")
  .on("click", function() {
    $("#console").append('<p>click</p>');
    console.log("click");
  })
  .call(onDrag);
  
  
$("#btn").click(function() {
  $("#console").empty();
});
  
  
p {
  line-height: 8px;
  font-size: 8px;
}

#svgContainer {
  display:block;
  width: 100px;
  height: 100px;
  background-color:  #333;
}

#console {
  display: block;
  width: 100%;
  height: 400px;
  overflow: scroll;
}

#btn {
  position: absolute;
  top: 70px;
  left: 150px;
  width: 50px;
  height: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.2/d3.js"></script>


<div id="svgContainer"></div>
<div id="console"></div>
<button id="btn">Clear</button>

最佳答案

只是在这里吐痰,但我可能会做这样的事情:

var dragger = null;
var onDrag = d3.drag()
    .on("start", function() {
        dragger = setTimeout(function() {
            $("#console").append('<p>drag-start</p>');  
            console.log("drag-start");
        }, 100);
    });
var box = svg.append("rect")
    .attr("x", 25)
    .attr("y", 25)
    .attr("width", 50)
    .attr("height", 50)
    .attr("fill", "orange")
    .on("click", function() {
         $("#console").append('<p>click</p>');
         console.log("click");
         clearTimeout(dragger);
     })
    .call(onDrag);

因此,您的拖动开始将延迟 100 毫秒(或您想要的任何时间),如果单击发生在该延迟之前,则会取消超时。

关于javascript - D3.js如何防止点击事件上的拖动启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374287/

相关文章:

javascript - 未定义的函数与javascripts

javascript - 通过ajax插入数据时如何阻止jquery删除子元素

javascript - 了解将函数作为 JavaScript 变量传递时变量会发生什么情况

c++ - 在 C++ 中监听事件

dataset - 如何构建显示大量数据的简单 D3 图表?

javascript - 如何让 php `json_encode` 返回 Javascript 数组而不是 Javascript 对象?

javascript - JavaScript 中的函数式编程 - 事件

javascript - 多线图 x 轴刻度未与数据点对齐

javascript - 弧线内的折线图

javascript - 无法将方法的头部传递给 React 标记中的事件处理