The contexts used for HTML canvases have a built-in method for checking font size. This method returns a TextMetrics object that has a width property that contains the width of the text.
function getWidthOfText(txt, fontname, fontsize){ if(getWidthOfText.c === undefined){ getWidthOfText.c=document.createElement('canvas'); getWidthOfText.ctx=getWidthOfText.c.getContext('2d'); } getWidthOfText.ctx.font = fontsize + ' ' + fontname; return getWidthOfText.ctx.measureText(txt).width; }
Or, as some of the other users suggested, you can wrap it in a span element:
function getWidthOfText(txt, fontname, fontsize){ if(getWidthOfText.e === undefined){ getWidthOfText.e = document.createElement('span'); getWidthOfText.e.style.display = "none"; document.body.appendChild(getWidthOfText.e); } getWidthOfText.e.style.fontSize = fontsize; getWidthOfText.e.style.fontFamily = fontname; getWidthOfText.e.innerText = txt; return getWidthOfText.e.offsetWidth; }
Testing:
- The first solution (canvas) - tested , works (returned in pixels)
- Second solution (DOM) - tested , working (returned in pixels)
Note that due to differences in implementation, the two may return slightly different values.
Performance Test: 26,788 calls averaged over 100 iterations. Tested at the end of 2014 mac mini, 1.4 GHz i5
Safari, version 10.1.1 (12603.2.4):
- First solution: 33.92 milliseconds for 26,788 calls
- Second solution: 67.94 milliseconds for 26,788 calls.
Google Chrome, version 60.0.3112.90:
- First solution: 99.1963 milliseconds for 26788 calls
- Second solution: 307.4605 milliseconds for 26788 calls
Xenon Aug 23 '14 at 23:50 2014-08-23 23:50
source share