2015-06-08 65 views
0

我寫了一個D3小部件,後面根據D3站點上的sunburst示例 - http://bl.ocks.org/kerryrodden/7090426D3 Mouseenter vs Mouseover

小部件很好,我甚至將它提交給一個開源項目(其他幾個人查看並測試過它)。但是現在,當我嘗試用不同的計算機(相同的瀏覽器版本)查看相同的窗口小部件時,我遇到與mouseover和mouseenter不一致的行爲。當我將鼠標懸停在項目上時,只有第一個項目懸停在不透明度集合上,當我將鼠標移動到小部件中時,不更新不透明度。

這裏是破碎的版本: http://jsfiddle.net/wrdrvr/f5tvsv5v/

var path = svg.datum(data).selectAll("path") 
    .data(partition.nodes) 
.enter().append("path") 
    .attr("display", function(d) { return d.depth ? null : "none"; }) // hide inner ring 
    .attr("d", arc) 
    .attr('id',function(d) { 
    return d.name+"-"+d.value; 
    }) 
    .style("stroke", "#fff") 
    .style("fill", function(d) { 
     if (d.depth > 0) { 
     return color(d.name); 
     } 
    }) .each(stash) 
    .on("mouseover", mouseover) 
//.on("mouseenter",mouseover) 
    .on("mouseleave", mouseleave) 

我能得到通過,包括了mouseenter,因爲它本來是一道努力,但是我以前不使用它,它並沒有在使用這個例子,我不知道爲什麼我需要在這裏。有人可以幫助澄清這一點?

+0

也許下面可以幫助你:http://stackoverflow.com/questions/7286532/jquery -mouseenter-vs-mouseover。雖然MouseEnter不會冒泡,但MouseOver可以。因此,如果在具有'hover'-Event的元素中有'hover'事件的元素,第二個元素也會觸發,但是對於MouseEnter,只有第一個元素會觸發,並且此元素中的元素不會再觸發。 JSFiddle:http://jsfiddle.net/ZCWvJ/7/這是你正在爲什麼或者我應該再次讀你的問題? –

回答

0

更新http://jsfiddle.net/f5tvsv5v/2/

.on("mouseleave", mouseleave) 
    //.on("mouseover", mouseover) 
.on("mouseenter",mouseover) 

因爲鼠標懸停不應該使用的mouseenter代替鼠標懸停不佈雷(http://www.quirksmode.org/dom/events/mouseover.html

+0

爲什麼需要泡泡?元素不是嵌套的,加上原始的D3例子不使用mouseenter。你能解釋一下嗎? – browskie

+0

看到這裏,如果它有幫助http://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-loggeding – Lau

+0

我說的是冒泡或捕獲在這裏是無關緊要的,因爲元素是在同一水平並沒有嵌套。 – browskie