textfill
何百もの div で名前が付けられた以下の jQuery 関数を使用します。基本的に、テキストのフォントサイズが最大になるように、内側のテキストのサイズを囲んでいる div に合わせてサイズ変更します。したがって、長いテキストは短いテキストよりも小さくなりますが、div からオーバーフローしないように最大のフォント サイズになります。
; (function($) {
/**
* Resizes an inner element's font so that the inner element completely fills the outer element.
* @version 0.1
* @param {Object} Options which are maxFontPixels (default=40), innerTag (default='span')
* @return All outer elements processed
* @example <div class='mybigdiv filltext'><span>My Text To Resize</span></div>
*/
$.fn.textfill = function(options) {
var defaults = {
maxFontPixels: 40,
innerTag: 'span'
};
var Opts = jQuery.extend(defaults, options);
return this.each(function() {
var fontSize = Opts.maxFontPixels;
var ourText = $(Opts.innerTag + ':visible:first', this);
var maxHeight = $(this).height();
var maxWidth = $(this).width();
var textHeight;
var textWidth;
do {
ourText.css('font-size', fontSize);
textHeight = ourText.height();
textWidth = ourText.width();
fontSize = fontSize - 1;
} while ((textHeight > maxHeight || textWidth > maxWidth) && fontSize > 3);
var pos = (maxHeight-textHeight)/2;
ourText.css('top', pos +'px');
});
};
})(jQuery);
次のような何百もの div でこのスクリプトを実行するためです。
<div class="textDiv"><span>text appears here</span></div>
同時に以下を使用します。
$('.textDiv').each(function() { $(this).textfill({ maxFontPixels: 28 })});
div の量にもよりますが、40 秒から 70 秒かかります。より速く実行できるようにコードを調整する必要があります。過去 2 時間試してみましたが、高速に実行できないようです。誰か助けてくれませんか?
編集:
コメントからいくつかの入力を取得し、コードを次のように変更しました。
var items = document.getElementsByClassName("textDiv");
for (var i = items.length; i--;) {
$(items[i]).textfill({ maxFontPixels: 28 });
}
少し速くなったように見えますが、それでも非常に遅いです。