javascript – D3鼠标悬停转换“卡住”

前端之家收集整理的这篇文章主要介绍了javascript – D3鼠标悬停转换“卡住”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

假设我想为导航菜单创建常规悬停效果,但我使用D3过渡来“软化”效果而不是CSS.对于.on方法,使用mou@R_301_401@ver和mou@R_301_401@ut可以正常工作.但问题是,如果鼠标在转换完成之前离开悬停链接,则转换会卡住.如何避免这种副作用?

例如,使用此代码,即使鼠​​标移动到其他位置,如果执行速度过快,底部边框仍显示为橙色:

d3.selectAll("a")
    .on("mou@R_301_401@ver",function() { 
       d3.select(this)
      .style("border-bottom-color","#fff")
      .transition()
      .duration(1000)
      .style("border-bottom-color","#B23600"); })
    .on("mou@R_301_401@ut","#fff"); });
最佳答案
我想现在发生的事情就是当你只在鼠标悬停上运行.transition时,
当您在1000ms过期之前离开时,过渡仍然没有完成.
因此,当您提前离开时,鼠标悬停转换仍在运行,
并且mou@R_301_401@ut事件上没有转换调用来覆盖此转换. (显然,即使mou@R_301_401@ut事件也不会停止与mou@R_301_401@ver事件关联的.transition.)

但是,正如您所指出的,当您对mou@R_301_401@ut事件进行转换时,
问题消失了.我相信这是因为mou@R_301_401@ut转换
优先于mou@R_301_401@ver .transition,因此在mou@R_301_401@ut事件上使用.transition会将mou@R_301_401@ut事件重新置于控制之下.

如果你在mou@R_301_401@ut事件上注释掉.transition,你可以在这里看到它.

http://jsfiddle.net/Ldmv6/1/

另外值得一读的是Scott Murray’s即将发布的d3书:http://ofps.oreilly.com/titles/9781449339739/_interactivity.html

原文链接:https://www.f2er.com/js/429704.html

猜你在找的JavaScript相关文章