【问题标题】:D3 transition isFinitDatae errorD3 转换 isFinitDatae 错误
【发布时间】:2014-10-15 23:59:02
【问题描述】:

我是 D3.js 的新手,我正在尝试添加过渡到 svg 颜色更改,但我遇到了未捕获的 ReferenceError: isFinitDatae is not defined

需要改变颜色的svg圆是这样设置的:

var markers = mapContainer.selectAll("circle")
                    .data(mapLayer2.features)
                    .enter()
                    .append("circle")
                    .attr("cx", function(d){ 
                        return projection([d.geometry.coordinates[0],d.geometry.coordinates[1]])[0];    
                    })                                          
                    .attr("cy", function(d){ return projection([d.geometry.coordinates[0],d.geometry.coordinates[1]])[1]; })
                    .attr("r", 5)
                    .style("fill", function(d,i){
                        if(d.properties.entero_100ml_1 > 35){
                            return "#ff0000"
                        } else {
                            return "#ffcc00"
                        }
                    });

我有多个按钮,颜色的变化取决于单击哪个按钮。我测试了多次单击所有按钮,并且颜色更改始终可以使用此代码正常工作:

var updateMarkers = function(enteroString)
{
    markers.data(mapLayer2.features)
            .style("fill", function(d,i){

                var keyArray = d3.keys(d.properties); 
                var valueArray = d3.values(d.properties);

                for (var j = 0; j < keyArray.length; j++){

                    if(keyArray[j] === enteroString){
                        if(valueArray[j] > 35){
                                    return "#ff0000";
                                } else {
                                    return "#ffcc00";
                                }
                    }
                }
            });
}

...但是当我添加转换时,持续时间和缓动转换仅在第一次单击按钮时起作用,并且抛出“未捕获的 ReferenceError:isFinitDatae 未定义”:

var updateMarkers = function(enteroString)
{
    markers.data(mapLayer2.features)
            .transition() 
            .duration(500) 
            .ease("quad")
            .style("fill", function(d,i){

                var keyArray = d3.keys(d.properties); 
                var valueArray = d3.values(d.properties);

                for (var j = 0; j < keyArray.length; j++){

                    if(keyArray[j] === enteroString){
                        if(valueArray[j] > 35){
                                    return "#ff0000";
                                } else {
                                    return "#ffcc00";
                                }
                    }
                }
            });
}

关于如何修复错误的任何想法,因为这在没有过渡的情况下工作?

感谢您的帮助,谢谢。

更新:&这里是 updateMarkers 被调用的地方:

chartContainer.selectAll("#xAxis text") 
        .attr("transform", function(d) {
          return "translate(10,0)";
        })
        .style("cursor", "pointer")
        .on("click", function(d,i) {
            var num = i + 1; 
            var numString = num.toString();
            var enteroString = "entero_100ml_" + numString;

            updateMarkers(enteroString);
        });

【问题讨论】:

  • 那么你在哪里打电话给isFinitDatae
  • 抱歉,打电话?我是新手,所以也许我误解了你,但我并没有像函数一样调用 isFinitDatae。这是一条错误消息,当 updateMarkers 运行并在按钮单击时发生转换时,它会记录到控制台。
  • 是的,错误消息告诉您isFinitDatae 未定义。那么它出现在你的代码中的什么地方呢?
  • 谢谢...isFinitDatae 出现在 D3.js 中,但不在我写的 JS 中。不知道我会如何定义它,我见过的其他 D3 动画中的 b/c 会在您调用 transition() 时自动发生。
  • 好的,我刚刚将我正在测试的 D3.js 版本与最新版本进行了比较,看起来“isFinitDatae”可能是某种错字 b/c 最新版本中只有“isFinite” .过渡适用于最新版本。谢谢拉斯,你的问题让我走上了正轨。

标签: javascript d3.js


【解决方案1】:

“isFinitDatae”是我正在测试的 D3 版本中的一个错字。在最新版本中,它是“isFinite”,并且过渡效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2015-07-22
    • 2012-05-07
    • 2023-03-27
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多