假设我想为导航菜单创建常规悬停效果,但我使用D3过渡来“软化”效果而不是CSS.对于.on方法,使用mouSEOver和mouSEOut可以正常工作.但问题是,如果鼠标在转换完成之前离开悬停链接,则转换会卡住.如何避免这种副作用?
例如,使用此代码,即使鼠标移动到其他位置,如果执行速度过快,底部边框仍显示为橙色:
d3.selectAll("a")
.on("mouSEOver",function() {
d3.select(this)
.style("border-bottom-color","#fff")
.transition()
.duration(1000)
.style("border-bottom-color","#B23600"); })
.on("mouSEOut","#fff"); });
最佳答案
我想现在发生的事情就是当你只在鼠标悬停上运行.transition时,
当您在1000ms过期之前离开时,过渡仍然没有完成.
因此,当您提前离开时,鼠标悬停转换仍在运行,
并且mouSEOut事件上没有转换调用来覆盖此转换. (显然,即使mouSEOut事件也不会停止与mouSEOver事件关联的.transition.)
原文链接:https://www.f2er.com/js/429704.html当您在1000ms过期之前离开时,过渡仍然没有完成.
因此,当您提前离开时,鼠标悬停转换仍在运行,
并且mouSEOut事件上没有转换调用来覆盖此转换. (显然,即使mouSEOut事件也不会停止与mouSEOver事件关联的.transition.)
但是,正如您所指出的,当您对mouSEOut事件进行转换时,
问题消失了.我相信这是因为mouSEOut转换
优先于mouSEOver .transition,因此在mouSEOut事件上使用.transition会将mouSEOut事件重新置于控制之下.
如果你在mouSEOut事件上注释掉.transition,你可以在这里看到它.
另外值得一读的是Scott Murray’s即将发布的d3书:http://ofps.oreilly.com/titles/9781449339739/_interactivity.html