javascript - 启用 mouseup/mousedown 但防止点击行为

标签 javascript jquery d3.js events dom-events

我这里有一个数据可视化(第二个):

http://mikeheavers.com/main/work

如果您单击代表技能领域的圆圈,它会显示具有特定技能的内部绿色圆圈。如果您按住代表技能的绿色圆圈,它们会动画、变大,然后在松开鼠标时收缩。然而,如果你简单地点击圆圈,它们会变大,但不会恢复到原来的大小(我猜 mousedown 没有注册) - 这会导致一个圆圈每次都会不断变大它被点击了。

有没有办法通过 d3 或通过 Javascript/jQuery 来防止点击行为?我只想要 mouseupmousedown

最佳答案

我观察到的行为与您描述的不同。

  • 如果您单击一个圆圈,无论单击时间有多长(无论是否按住),它都会返回到其原始大小。
  • 如果您反复快速单击一个圆圈,此时它会开始变大并且不会恢复到原来的大小。
  • 如果您按住一个圆圈然后将鼠标移出它,它会保持粉红色并且不会恢复到原来的大小。

我认为附加一个简单的 .on('mouseout', handler) 来将球体返回到它们的原始大小将解决最后一个问题,这是非常明显的,任何遗漏的 mouseup 由于搬出而发生的事件。您还可以将 mouseup 附加到整个文档 (d3.select('body').on('mouseup', handler)),这将捕获任何此类事件;那么您只需要记录最后一个被点击的球体。

此外,要解决您原来的问题,您可以通过在 mousedown 中添加 e.preventDefault() 来确保触发 mouseup 事件> 事件。这将防止浏览器将快速点击变成双击或其他事件。

讨论这些问题的其他帖子:

关于javascript - 启用 mouseup/mousedown 但防止点击行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027052/

相关文章:

javascript - Protractor : xlsx-template Error cannot read property 'length' of undefined

javascript - 我可以在不使用 .simulate() 的情况下调用方法吗 - Jest Enzyme

jquery - 拖放事件触发两次

javascript - 使用 javascript 或 d3js 解析 csv : how to skip a column?

javascript - 想要根据给定的年龄计算出生日期

javascript - 如何在 Ajax 加载的内容上重新附加/重新绑定(bind)事件?

javascript - 将文本从一个 html 加载到另一个 html 文件中的两列

javascript - 使用 Ajax 和 $.each 获取复选框的值

reactjs - Chart 中的 SVG 在 Prop 更改后不会重新渲染。 react + d3

javascript - 在地球上放大 D3 v4