gpt4 book ai didi

javascript - 使用 D3.js 计算带有字母间距的文本长度

转载 作者:行者123 更新时间:2023-11-28 06:00:36 25 4
gpt4 key购买 nike

当我计算文本路径元素的文本长度时,当我以不同方式设置“字母间距”样式时,该值不会改变。

有没有办法处理由于额外间距而导致的额外长度?

目前,我计算文本长度以隐藏双层分区图上的一些标签:

textsElements
.attr("dy", function(d) {
var offset = (radius / strokeWidth)/2;
var rotation = getRotationDeg(d)
return rotation > 0 && rotation < 180 ? -offset : offset;
})
.append("textPath")
.attr("startOffset", "50%")
.attr("class","labels-text")
.style("text-anchor", "middle")
.attr("xlink:href", function (d) { return '#' + createTextPathId(d); })
.text(function (d) { return d.name; });
// Hide labels that are to long
textsElements.each(function(d){
var el = d3.select(this);
d.labelToLong= false;
if(( d.hiddenArcLength - this.getComputedTextLength()) < 5) {
el.style("opacity",0);
d.labelToLong = true;
}
});



textpath.labels-text {letter-spacing: 1px;}

最佳答案

事实上,getCompulatedTextLength() 忽略了字母空格。

您可以尝试使用getBBox():

textsElements.each(function(d){
var el = d3.select(this);
d.labelToLong= false;
if(( d.hiddenArcLength - this.getBBox().width) < 5) {
el.style("opacity",0);
d.labelToLong = true;
}
});

不幸的是,这对您没有帮助,因为您处理的是倾斜路径,而不是水平文本。因此,您可以尝试根据您的字距调整使用给定值调整 getCompulatedTextLength:

textsElements.each(function(d){
var el = d3.select(this);
var tweak = 1.2;//you can make this value >1 or <1, according to the kerning
d.labelToLong= false;
if(( d.hiddenArcLength - this.getComputedTextLength()*tweak) < 5) {
el.style("opacity",0);
d.labelToLong = true;
}
});

关于javascript - 使用 D3.js 计算带有字母间距的文本长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com