Написал функцию, которая добавляет в конец троеточие, если количество строк больше заданного в атрибуте data.
$(window).on('load', function() {
var fullText=$('.i-ellips').text();
function ellipsis() {
console.time('ellipsis');
var ellips = $('.i-ellips');
var isOverflow = ellips.css('overflow') === 'hidden';
if (isOverflow) {
ellips.css('visibility', 'hidden');
var text = fullText;
var lineHeight = parseFloat(ellips.css('line-height'));
var lineCount = ellips.attr('data-ellipsis');
// var lineCount = ellips[0].dataset.ellipsis;
var maxHeight = lineHeight * lineCount;
ellips.text(fullText);
var searchSpace = (text.indexOf(' ') !== -1 ) ? ' ' : '\u3000';
var separateText = text.split(searchSpace);
var str = '';
console.time('ellipsis-foreach');
for (var i = separateText.length; i >= 0; i--) {
if (ellips[0].offsetHeight <= maxHeight) {
console.log(i);
break;
} else {
str = separateText.slice(0, i).join(searchSpace);
ellips.text(str + '...');
}
}
ellips.css('visibility', 'visible');
console.timeEnd('ellipsis-foreach');
}
console.timeEnd('ellipsis');
};
ellipsis();
$(window).on('resize', ellipsis);
});
На цикл тратится около где-то 30.60205078125ms.
На всю функцию - 36.9501953125ms
Как я увидел, значительное время уходит на эту строку
ellips.text(str + '...');
Что можно сделать? Как оптимизировать время работы метода text?
Ссылка на пример