我有一個用d3.js制作的圖,我有以下的屬性和節點的屬性:
//在父節點之前的位置輸入任何新節點
var nodeEnter = node.enter().append("g"/span>)
.attr("class", "node")
.attr("transform", function(d) { return "rotate(" (d.) x - 90) ")translate(" d.y ")"; })
.on("click"/span>, click)
.on("dblclick", dblclick)
我想增加當滑鼠懸停在節點上時,在節點標題下劃線的功能。像這樣的東西,不幸的是,它并不作業:
var nodeEnter = node.enter().append("g"/span>)
.on("mouseover") .style("text-decoration","underline")
.on("mouseout") .style("text-decoration","none")
編輯:我更傾向于設定一個條件,使其只發生在圖的某些節點上。
uj5u.com熱心網友回復:
你沒有正確使用 selection.on() 方法。為了在一個事件上做一些事情,你需要為該方法提供第二個引數:一個描述在該事件上采取的行動的函式:
D3v6是一個非常好的工具。
D3v6 D3v5和之前 在D3的所有版本中, 如果您只提供一個引數,它將回傳分配給該事件的當前事件處理函式。在你的案例中,你很可能還沒有這樣做(因為你正試圖這樣做),所以 因此,為了在滑鼠懸停時用一些邏輯來突出節點,這樣我們就可以對不同的節點有不同的結果,我們可以使用這樣的方法: 這里的if陳述句可以用你喜歡的任何邏輯來代替。 我看到你可能使用了一個分層布局生成器,D3的分層布局生成器將原始資料的屬性嵌套到一個資料屬性中,這樣布局屬性和非布局屬性就不會發生沖突,所以datum.property可能位于datum.data.property中(如果你有問題,請記錄資料)。
uj5u.com熱心網友回復: 你可以使用CSS在懸停處添加下劃線
標籤: 下一篇:
<asideclass="s-notices-notice__infojs-post-noticemb16js-bounty-notification"role=".on("mouseover"/span>, function(event, datum) { ... })
.on("mouseover"/span>, function(datum, index, nodes) { ... })
this將是目標元素(除非使用arrow notation)。資料是系結到目標元素的資料,是傳遞給selection.data()的陣列中的一個專案。
.on("mouseover").style(...) 將回傳一個錯誤,例如 "無法找到 null 的屬性樣式",因為 .on("mouseover") 將回傳 null:沒有分配給該事件的事件處理函式可以回傳。
selection.on("mouseover"/span>, function(event, datum) {
if(datum.property == "someValue"/span>) {
d3.select(this).style("text-decoration","underline")。
}
})
.on("mouseout", function(event, datum) {
d3.select(this).style("text-decoration","none")。
})
var svg = d3.select("body")
.append("svg") 。
var data = [
"滑鼠下劃線"。
"Never underline"; "Never underline"selectAll("text")
.data(data)
.enter()
.append("text"/span>)
.attr("x"/span>, 20)
. attr("y", (d,i)=> i*50 40)
.text(d=>/span>d)
.on("mouseover"/span>, function(event, datum) {
if(datum == "underline on mouse") {
d3.select(this).style("text-decoration","underline") 。
}
})
.on("mouseout"/span>, function(event,datum) {
d3.select(this).style("text-decoration"/span>,"none")。
})
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
<script src="https://cdnjs. cloudflare.com/ajax/libs/d3/7.0.0/d3.min.js"></script> .node:hover{
text-decoration: underline;
}
