如果rect低于certian身高,则删除文本d3js v4

时间:2018-01-04 13:54:22

标签: javascript d3.js

如果文本的y位置超过某个值,我试图从条形图中删除文本值,我只希望删除该特定文本,而不是所有文本。

我遇到的问题是,在页面完全加载之前,y位置没有被评估(或者看起来似乎是这样),这里是那段代码:

.text( function(d) { if(d3.select(this).attr("y") < 10) { "" }
    else { return d["Category" + catInt]; } 
    console.log("Not yet evaluated: " + d3.select(this).attr("y"))
})

在这种情况下返回12个空值,但是如果我在之后执行的函数中记录值,我会获得所有位置,如下所示:

function getProp() {
    d3.selectAll(".textEnter").each(function(d) {
        console.log("Evaluated: " + d3.select(this).attr("y"))
    })
}

有谁知道更好的方法吗?

以下是完整代码:编辑:已修复 Plunker

2 个答案:

答案 0 :(得分:1)

由于您正在调用transition(),因此文本即将进行转换,并且在该时间点尚未实际分配y属性。此外,您在第一个if语句中缺少return。所以该函数只是运行到最后并返回undefined

您可以重新使用y缩放功能来检查y的未来值。我在您的Plunker代码中使用了它,它显示了标签:

.text(function(d) { 
    if( y(d["Category" + catInt]) < 10) {
        return "";
    }
    else {
        return d["Category" + catInt];
    } 
})

答案 1 :(得分:1)

您可以使用const splitString = "123.123.1".split("."); for (var i = 0; i < 3; i++) { var prefix = parseInt(splitString[i]); console.log(stringCheck(prefix)) } function stringCheck(inputString) { if (inputString < 250) { return true } else { return false } }回调并按以下方式添加文字:

transition.on('end')