12

私はd3をいじり始めたばかりで、要素をクリックしたときに要素の色をどのように変えることができるのか疑問に思っていました。

このフィドルは、クリックすると円の色が変わりますが、もう一度クリックすると、色を白に戻したいと思います。

現在のコード:

var sampleSVG = d3.select("#viz")
        .append("svg")
        .attr("width", 100)
        .attr("height", 100);    

    sampleSVG.append("circle")
        .style("stroke", "gray")
        .style("fill", "white")
        .attr("r", 40)
        .attr("cx", 50)
        .attr("cy", 50)
        .on("click", function(){d3.select(this).style("fill", "magenta");});
4

3 に答える 3

19

自分でトグル関数を作成し、クリックに渡します:http: //jsfiddle.net/maniator/Bvmgm/6/

var toggleColor = (function(){
   var currentColor = "white";

    return function(){
        currentColor = currentColor == "white" ? "magenta" : "white";
        d3.select(this).style("fill", currentColor);
    }
})();
于 2012-06-07T20:46:16.093 に答える
3

これは、ジャンキーな方法ではありますが、機能しました。。。

var PointColors = ['white', 'magenta']
var sampleSVG = d3.select("#viz")
    .append("svg")
    .attr("width", 100)
    .attr("height", 100);    

sampleSVG.append("circle")
    .style("stroke", "gray")
    .style("fill", "white")
    .attr("r", 40)
    .attr("cx", 50)
    .attr("cy", 50)
    .on("click", function(){
        PointColors = [PointColors[1], PointColors[0]]
        d3.select(this).style("fill", PointColors[0]);});
于 2012-06-07T21:04:42.340 に答える
1

編集:Chromeでは機能しません。FFでは機能します。問題は、塗りつぶしの属性にあります。

this.style.fill

Chromeは「#FFFFFF」で「白」を変更します。

ちなみに、より明確な解決策はクラスを切り替えることです。

.on("click", function(){var nextColor = this.style.fill == "white" ? "magenta" : "white";
        d3.select(this).style("fill", nextColor);});

http://jsfiddle.net/kUZuW/を参照してください

于 2012-06-07T21:08:02.947 に答える