テキストの長さを元に、divなどに収まるサイズのフォントサイズを計算するJSのメモ
テキストの長さを元に、divなどに収まるサイズのフォントサイズを計算するJSのメモ:
なんかCSSとかJSでライブラリすでにありそうだったけど、自前で実装したほうが早そうだったので。
以下条件をもつときに、見切れたりすることなくテキストを表示したい。
以上。
なんかCSSとかJSでライブラリすでにありそうだったけど、自前で実装したほうが早そうだったので。
やりたいこと
以下条件をもつときに、見切れたりすることなくテキストを表示したい。- divやpタグ内にテキストを挿入し表示する。
- divやpタグの横幅は、一定ではない。
- 表示したいテキストの文字数は一定ではない。
- テキストは横向きに1行で表示し、改行はしない。ありえない。
補足:
- ViewportWidth 等は、テキストが一定ではないため使え無い。
実装
function
function divideBoxwitdhAndPxPerText(boxWidthPx, pxPerText) { return boxWidthPx / pxPerText; } function makeBetterFontSize(boxWidthPx, text){ // Default is 15.(font-size:30px) for my proj. var pxPerText = 15; if (boxWidthPx < 1) { console.warn('`boxWidthPx` must be over 1.'); return pxPerText * 2; } if (typeof boxWidth !== 'number') { console.warn('`boxWidthPx` is not Number. return default font-size.'); return pxPerText * 2; } if (typeof text !== 'string') { console.warn('`text` is not String. return default font-size.'); return pxPerText * 2; } while(pxPerText > 0) { var maxTextLength = divideBoxwitdhAndPxPerText(boxWidthPx, pxPerText); if (text.length <= maxTextLength) { break; } pxPerText -= 1; } if (pxPerText === 0) { pxPerText = 0.5; } // Font-size is `pxPerText * 2` for my proj. return pxPerText * 2; }
使い方
var boxWidth = 271; var text = "999999999.99999999"; console.log("A", makeBetterFontSize(boxWidth, text)); // 30 boxWidth = 271; text = "9999999999999.99999999"; console.log("B", makeBetterFontSize(boxWidth, text)); // 26 boxWidth = 300; text = "9999999999999.99999999"; console.log("C", makeBetterFontSize(boxWidth, text)); // 30 boxWidth = 30; text = "9999999999999.99999999"; console.log("D", makeBetterFontSize(boxWidth, text)); // 2 boxWidth = 20; text = "9999999999999.99999999"; console.log("E", makeBetterFontSize(boxWidth, text)); // 1 boxWidth = 271; text = "9.99999999"; console.log("F", makeBetterFontSize(boxWidth, text)); // 30 boxWidth = "あああ"; text = "ほ"; console.log("G", makeBetterFontSize(boxWidth, text)); // 30 // ⚠️がでる。使い方が間違ってる。 boxWidth = 300; text = []; console.log("H", makeBetterFontSize(boxWidth, text)); // 30 // ⚠️がでる。使い方が間違ってる。 boxWidth = 0; text = "111.0"; console.log("I", makeBetterFontSize(boxWidth, text)); // 30 // ⚠️がでる。使い方が間違ってる。
補足
boxWidth
には実際のpxが入るので以下みたいなのをつかう想定。var boxWidth = document.getElementById('my-id').clientWidth;
コメント
コメントを投稿