この猫をスライスする方法はいくつかあります。2つの明らかなものがすぐに思い浮かびます。
アウトオブビュールーラーテクニック
これが一番簡単です。キャンバスのviewBoxの外側にテキスト要素を作成し、フォント情報とテキストを入力して測定するだけです。
// set it up -- put the variable somewhere globally or contextually accessible, as necessary
var textRuler = paper.text( -10000, -10000, '' ).attr( { fill: 'none', stroke: 'none' } );
function getTextWidth( text, fontFamily, fontSize )
{
textResult.attr( { text: text, 'font-family': fontFamily, 'font-size': fontSize } );
var bbox = textResult.getBBox();
return bbox.width;
}
想像力の広がりによってはエレガントではありません。しかし、それは比較的少ないオーバーヘッドと複雑さなしであなたが望むでしょう。
Cufonizedフォント
cufonizedフォントの使用を検討する場合は、DOMをまったく混乱させることなく、特定のテキスト文字列のサイズを計算できます。実際、これはおそらく、キャンバスの要素measureText
メソッドが舞台裏で行うこととほぼ同じです。インポートされたフォントが与えられた場合、あなたは単にこのようなことをするでしょう(このプロトタイプを考えてください!)
// font should be the result of a call to paper.[getFont][2] for a cufonized font
function getCufonWidth( text, font, fontSize )
{
var textLength = text.length, cufonWidth = 0;
for ( var i = 0; i < textLength; i++ )
{
var thisChar = text[i];
if ( ! font.glyphs[thisChar] || ! font.glyphs[thisChar].w )
continue; // skip missing glyphs and/or 0-width entities
cufonWidth += font.glyphs[thisChar].w / font.face['units-per-em'] * fontSize;
}
return cufonWidth;
}
私は、cufonizedフォントを使用するのが本当に好きです。興味深い方法でアニメーション化できるという点で、テキストよりもはるかに便利です。ただし、この2番目のアプローチは、必要または必要以上に複雑になる可能性があります。