javascript - d3.js : Differentiate between drag/start/end and click event

标签 javascript d3.js

正如标题所说,我有一个对象,我需要它的所有拖动和单击事件。有 some discussion关于这个问题,但它主要涉及点击和拖动事件。 (并且回复 fiddle 没有正常工作)

我有一个 fiddle我在这里的地方。当我拖动时,单击被阻止,但是当我单击 dragstart 和 end 事件时触发。我希望它们在我单击时不触发,我希望在我想拖动时单击不触发。

var drag = d3.behavior.drag()
  .origin(function(d){return d})
  .on('drag', function(d){
   d3.select(this).attr('cx', function(d){ return d.x += d3.event.dx });
   d3.select(this).attr('cy', function(d){ return d.y += d3.event.dy });   
   console.log('dragging');
})
.on('dragstart', function(d){
  d3.event.sourceEvent.stopPropagation()
  console.log('drag start');
})
.on('dragend', function(d){
  console.log('drag end');
})

// ..... 

 MySvgElementWith3DStuffOnIt.on('click', function(){
  if(d3.event.defaultPrevented) return;
  console.log('clicked');
});

最佳答案

@thatOneGuy 的小更新以使用 d3v4 拖动模块

https://jsfiddle.net/mhebrard/q5eL5qyv/

var drag = d3.drag()
    .on('drag', function(d){
    d3.select(this).attr('cx', function(d){ return d.x += d3.event.dx });
    d3.select(this).attr('cy', function(d){ return d.y += d3.event.dy });   
    console.log('dragging');
  })
  .on('start', function(d){
    console.log('drag start');
  })
  .on('end', function(d){
    console.log('drag end');
  })

关于javascript - d3.js : Differentiate between drag/start/end and click event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37533399/

相关文章:

javascript - Mouseenter 事件仅针对 d3.js svg 圆触发一次

d3.js - NVD3 - 更新数据时不均匀的滴答声

javascript - IBM Cloud Function 不产生输出

javascript - ckeditor 内联保存/提交

d3.js - 从简单的 JSON 字符串加载 D3.js 数据

javascript - 格式化数字供人类使用

javascript - 如何在 css 中引用 svg 类?

javascript - 使用来自另一个自动填充的信息的 jQuery 自动填充文本框

javascript - WordPress 中自定义 HTML block 的问题

javascript - 将 idTabs 用于 jquery 时,我可以防止#div 锚定在页面上吗?