2014-06-24 34 views
2

我覺得我正在嘗試做一些相當簡單的事情,但我似乎無法弄清楚。我有一個頁面顯示幾個條形圖,我試圖建立一個按鈕,使某些酒吧出現和消失。酒吧有標籤,當按鈕被切換時,我希望酒吧的一半消失,其餘酒吧的大小加倍和酒吧的標籤向下移動一點點。根據D3中的當前值更改html屬性

我使用D3.js繪製圖形,除了這些小標籤外,我幾乎可以使用所有工作。我所要做的就是將它們的「y」屬性增加大約15個像素,但我似乎無法找到在更改它之前請求此值的方法!

起初我還以爲

d3.selectAll(".bar-value-label").attr("y", function(d,i){ return d + 15;}) 

應該工作。但是,當我記錄了這個「d」時,它變成了對最初用於創建此元素的數據對象的引用。

所以,基本上我只是想找到一種方法來獲取當前值並將其減小或減小。在D3中有沒有一種很好的方法?

問候, 萊納斯

編輯: 好了,我已經找到一個可行的辦法。我很doubtfull,這是最好的/最有效的方法,所以答案仍然非常歡迎的。

  var resp_labels = d3.selectAll(".bar-value-label-resp")[0]; 
      resp_labels.forEach(function(d,i){ 
       var old_y = parseFloat(d.getAttribute("y")); 
       d3.select(d).transition().attr("y", function(i){ return old_y - barheight/4 ;}); 
      }); 

回答

0

我還沒有機會來檢查它的工作原理,但我認爲這是您的解決方案的一個稍微簡化的版本:

var resp_label = d3.select(".bar-value-label-resp"); 
var old_y = +resp_label.attr("y"); 
resp_label.transition().attr("y", old_y - barheight/4);