如何使用 JavaScript 查詢 HTML canvas 中文字的高度?


概述

canvas 是一個 HTML 元素,允許我們在網頁上顯示任何型別的自定義文字或圖形。canvas 使圖形可編輯,我們可以建立自己的自定義文字或設計。

可以使用 `` 標籤將 canvas 元素新增到 HTML 中,或者可以使用 JavaScript 透過 'document' 物件的 'createElement' 方法新增它。由於我們需要查詢 HTML canvas 中寫入的文字的高度,我們可以使用 "textMetrics" 物件的 measureText() 屬性來計算文字的高度。

語法

下面顯示了用於查詢文字高度的語法,其中我們參考了 canvas 的 getContext() 屬性。

var fM = ctx.measureText("A");
var txtH = fM.actualBoundingBoxAscent + fM.actualBoundingBoxDescent;
  • measureText() − 上述語法中的 measureText() 被稱為 textMetrics 物件的屬性。在 measureText() 中,傳遞的引數是具有最大高度的字元,例如 measureText("C")。

  • actualBoundingBoxAscent − 這是 measureText() 屬性的方法,它返回文字在垂直方向上基線以上的高度。透過此方法,我們可以獲得基線上方字元的高度。

  • actualBoundingBoxDescent − 這是 measureText() 屬性的方法,它返回文字在垂直向下方向上基線以下的高度。透過此方法,我們可以獲得基線下方字元的高度。

演算法

  • 步驟 1 − 在文字編輯器中建立一個 HTML 檔案,並將 HTML 基本結構新增到檔案中。

  • 步驟 2 − 現在使用 HTML `` 標籤建立一個 canvas,其 id 名稱為 "textCanvas"。還要向 canvas 標籤新增高度和寬度屬性。

<canvas id="textCanvas" width="300" height="150"></canvas>
  • 步驟 3 − 現在將 script 標籤新增到 body 標籤。

<script></script>
  • 步驟 4 − 現在訪問 canvas 標籤並將其儲存在一個變數中。

let canva = document.getElementById("textCanvas");
  • 步驟 5 − 使用 getContext() 將文字新增到 2d canvas。

let ctx = canva.getContext("2d");
  • 步驟 6 − 現在將 fontSize 和 fontFamily 儲存到變數中。

var f = "20px Arial";
ctx.font = f;
  • 步驟 7 − 現在將任何文字儲存到變數中。

var txt = "tutorialspoint.com";
  • 步驟 8 − 建立 measureText() 的引用並存儲在一個變數中。

var fM = ctx.measureText("A");
  • 步驟 9 − 現在使用 actualBoundingBoxAscent 和 actualBoundingBoxDescent 方法,並將它們的返回值相加,並將其儲存在一個變數中。

var txtH = fM.actualBoundingBoxAscent + fM.actualBoundingBoxDescent;
  • 步驟 10 − 使用 fillText() 方法將高度和文字新增到 canvas。

ctx.fillText("Text: " + txt, 5, 40)
ctx.fillText("Height: " + txtH, 5, 80)

示例

在這個例子中,我們將使用 HTML 建立一個 canvas,並使用 JavaScript 將文字新增到 canvas。然後,我們將使用 textCentrics 屬性來計算文字的高度。

<html>
<head>
   <title> find the height of text </title>
   <style>
      canvas {
         border: 2px solid black;
      }
   </style>
</head>
<body>
   <h3> Finding height of the text </h3>
   <canvas id="textCanvas" width="300" height="150"></canvas>
   <script>
      let canva = document.getElementById("textCanvas");
      let ctx = canva.getContext("2d");

      var f = "20px Arial";
      ctx.font = f;

      var txt = "tutorialspoint.com";
      var fM = ctx.measureText("A");

      var txtH = fM.actualBoundingBoxAscent + fM.actualBoundingBoxDescent;

      ctx.fillText("Text: " + txt, 5, 40)
      ctx.fillText("Height: " + txtH, 5, 80)
   </script>
</body>
</html>

下圖顯示了輸入文字的高度。下圖中帶有黑色邊框的框是包含文字“tutorialspoint.com”且高度為“15”的 canvas。這裡計算了基線上方的高度加上基線下方的字元高度,並將它們相加以獲得總文字的高度。

結論

此功能有助於網頁佈局的 DOM 操作。這有助於建立動態過渡效果和動畫。正如我們使用 fillText() 方法一樣,我們可以傳遞三個引數:要新增到 canvas 的文字,第二個引數是 canvas 水平方向上的 x 座標(傳遞數值),第三個引數是垂直方向的 y 座標(設定數值)。

更新於:2023年10月13日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告