当前位置: 首页 > 面试题库 >

在不渲染的情况下测量文本的宽度/高度

萧永长
2023-03-14
问题内容

有什么方法可以在不渲染实际元素的情况下获得文本宽度的估算值?像画布TextMetrics一样?

案例:我需要估计ReactList的元素高度。为此,我需要大致知道文本元素将需要多少空间(或它们将跨越多少行)。

例如。

render(){
    return <div><SomeComponentWithKnownDims/><p>{this.props.someText}</p></div>;
}

如果我知道someText将被渲染成一行的宽度以及该行的长度,那么我可以很容易地得出组件高度的合理估计。

编辑:请注意,这是非常重要的性能, 不应触碰DOM


问题答案:

请检查一下。是使用画布的解决方案

function get_tex_width(txt, font) {
        this.element = document.createElement('canvas');
        this.context = this.element.getContext("2d");
        this.context.font = font;
        return this.context.measureText(txt).width;
    }
    alert('Calculated width ' + get_tex_width("Hello World", "30px Arial"));
    alert("Span text width "+$("span").width());

演示使用

编辑

使用画布的解决方案不是最好的,每个浏览器处理不同的画布大小。

这是一个使用临时元素获取文本大小的好方法。
演示版

编辑

canvas规范没有提供用于测量字符串高度的方法,因此可以使用parseInt(context.font)。获取宽度和高度。此技巧仅适用于px大小。

function get_tex_size(txt, font) {
    this.element = document.createElement('canvas');
    this.context = this.element.getContext("2d");
    this.context.font = font;
    var tsize = {'width':this.context.measureText(txt).width, 'height':parseInt(this.context.font)};
    return tsize;
}
var tsize = get_tex_size("Hello World", "30px Arial");

alert('Calculated width ' + tsize['width'] + '; Calculated height ' + tsize['height']);


 类似资料:
  • 问题内容: 我可以使用tkFont来测量文本,但是我不需要根窗口-> tk.Tk() 问题答案: 您确实想问:“如何在不首先创建窗口的情况下测量字符串渲染的宽度?” 答案是:您不能。Tk需要它的根实例来进行绘制等。 不过,您可以创建它,测量文本并立即通过进行处理。这是如此之快,以至于我看不到该窗口。

  • 问题内容: 如果我有: 然后 会拉伸以填充该空间。我希望图像保持相同大小,但是要在DOM中占用那么多空间。我是否必须添加封装或?我讨厌添加样式标记。 问题答案: 是的,您需要一个封装div: 与类似: 其他解决方案(填充,边距)比较繁琐(因为您需要根据图像的尺寸计算正确的值),但也不能有效地使容器小于图像。 同样,上述内容可以更容易地适用于不同的布局。例如,如果您希望图像位于右下角:

  • 我想复制这家伙做的但不使用画布。我想有一个div在我的页面的中心,并简单地增加宽度/高度/边界半径10px每秒。这工作得很好,但是由于某种原因,div越大,它向右下方移动的越多。圆圈不是静止不动的,它的中心位置随着它变大而改变。如何在不改变位置的情况下更改div的宽度/高度? main.css index.html APP咖啡

  • 问题内容: 我有一个Flask应用程序,当从flask调用它时,调用时不会出现问题。 我需要相同的方法在flask外部工作 我可以使用,但是我想在两种情况下(flask and command line)都可以使用相同的方法 问题答案: 你需要在应用程序上下文中呈现它。将应用程序导入后端代码,然后执行以下操作。

  • 我发现,如果我们设置一个块级元素的高度为或而没有设置父级的高度为显式值,并且它的块级子级有底部边距,那么它在Chrome中会计算不同的高度,而在Firefox中则不会。对于设置的情况: http://codepen.io/anon/pen/bjgkmr 块的高度将计算为的内容高度。我很困惑为什么应该和一样计算,因为父元素(和标记)没有显式地设置它的高度,而是有不同的高度,因为我们只是直接将高度设置

  • 请原谅我,如果这是很难遵循,但我有一个具体的问题,我需要帮助解决。我做了大量的研究,尝试了许多解决方案,但都没有奏效。 我的问题是,我有一个类,它正在扩展(下面的代码),这个类需要使用宽度和高度来缩放图像(我正在制作一个程序,用户可以创建自定义教程,包括图像)。当我实例化这个时,我得到一个错误,说宽度和高度必须非零。我明白这是因为布局管理器还没有传递首选大小,但是我不知道如何将该大小传递给面板。在