我使用d3.js在圆圈中间生成带有文本徽标的svg圆圈.这是svg的结果.
<g id="main">
<circle r="114" fill="#F0E8D0"></circle>
<text text-anchor="middle">The movie title</text>
</g>
Run Code Online (Sandbox Code Playgroud)

这是d3.js
var circles = [{r: innerRadius}];
svg.append("g").attr("id","main");
svg.select("#main").selectAll("circle")
.data(circles).enter()
.append("circle")
.attr("r",function(d){return d.r})
.attr("fill","#F0E8D0");
svg.select("#main").append("text")
.attr("text-anchor", "middle")
.text(function(){ return "The movie title";});
Run Code Online (Sandbox Code Playgroud)
当鼠标悬停并离开圆圈时,我也想要激活一些动画.
svg.select("#main")
.on("mouseover",function(){
//code for transition
}).on("mouseout",function(){
//code for transition
})
Run Code Online (Sandbox Code Playgroud)
所以问题是:当鼠标移动到圆圈时,动画会按预期触发,但是,当鼠标触摸文本元素时,会发生mouseout事件(鼠标离开圆圈),然后再次发生鼠标悬停事件(鼠标进入文本元素) ),这是不可取的.
当鼠标触摸"<g>"标签的任何子元素时,似乎将调用动画回调.
当鼠标触摸文本元素时,我不希望发生任何动画.我该怎么做?
Avi*_*bey 28
另一种解决方案是使用mouseenter而mouseleave不是mouseover和mouseout.
mouseenter类似于mouseover除了当指针(鼠标)从一个监听器(在这种情况下是圆圈)后代的物理空间(在这种情况下为文本)移动到其自己的物理空间时不触发它.
'mouseleave'的相同推理
来源:https://developer.mozilla.org/en-US/docs/Web/Events/mouseenter 和https://developer.mozilla.org/en-US/docs/Web/Events/mouseleave
Lar*_*off 17
您可以text通过设置pointer-events为none:阻止元素接收鼠标事件(因此当您将鼠标移到鼠标上时触发鼠标输出事件):
svg.select("#main").append("text")
.attr("text-anchor", "middle")
.attr("pointer-events", "none")
.text(function(){ return "The movie title";});
Run Code Online (Sandbox Code Playgroud)
您可能还希望circle在g元素上而不是在元素上设置事件:
svg.select("#main").selectAll("circle")
.data(circles).enter()
.append("circle")
.attr("r",function(d){return d.r})
.attr("fill","#F0E8D0")
.on("mouseover",function(){
//code for transition
})
.on("mouseout",function(){
//code for transition
})
Run Code Online (Sandbox Code Playgroud)