我使用以下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 秒。我迫切需要调整代码以使其运行得更快。我已经尝试了过去两个小时,但似乎无法让它运行得更快。有人可以帮忙吗?
编辑:
从评论中获取一些输入并将代码更改为:
var items = document.getElementsByClassName("textDiv");
for (var i = items.length; i--;) {
$(items[i]).textfill({ maxFontPixels: 28 });
}
它似乎有点快,但仍然很慢。