Как обрезать длинную строку на javaScript. Введение
Я уже как-то писал статью как обрезать длинную строку и добавить в конец точки, только в прошлой статье код был написан на php. В этой статье реализован практически тот же функционал, только на javaScript. Чтобы код не повторялся, я решил его немного разнообразить. Помимо обрезания строки и подстановки в конец точек можно сделать плавное осветление последних символов.
Для работы будем использовать библиотеку jQuery — не забудьте ее подключить на странице.
Обрезать строку и плавно осветлить последнии символы. Алгоритм
При обрезании строки сложностей не должно возникнуть, для этого можно воспользоваться функцией substr. А вот с осветлением немного сложней. Плавно осветлять будем последнии 10 символов. Для этого необходимо обрезать последнии 10 символов и по одному обернуть каким-нибдуь строчным элементом, например, span. И каждому спану необходимо присвоить свой цвет. После этого получившуюся конструкцию из спанов прилепим к тексту с обычным текстом.
Обрезать строку и плавно осветлить последнии символы. Код
Для удобства код оформлен в виде функции, также код подробно прокомментирован, поэтому все должно быть понятно.
/** * Функция для сокращения длинного текста * @var object element - элемент, в котором необходимо укоротить текст * @var int count_lit - лимит символов * @var bool light - true|false задать осветление последних символов или нет */ function cutLongString(element, count_lit, light){ // текст в блоке var text = element.html(); // длина текста в блоке var all_len = text.length; // хранилище для нового текста var new_text; // если текст больше заданного лимита, то обрезаем его if (all_len > count_lit){ // обрезаем текст и добавляем три точки в конец new_text = text.substr(0, (count_lit - 3)) + '...'; // если необходимо задать осветление последним символам if(light){ // кусок обычного текста var first_part_text = new_text.substr(0, (count_lit - 10)); // кусок текста, который будет осветлен var light_part_text = new_text.substr((count_lit - 10), count_lit); // переменная, для хранения осветленного текста var light_text = ""; // цвета для последний 10 символов var array_color = ["#444444", "#545454", "#646464", "#747474", "#848484", "#949494", "#a4a4a4", "#b4b4b4", "#c4c4c4", "#d4d4d4"]; // перебираем по одному символу текст, который будет осветлен for(var i = 0; i < 10; i ++){ // оборачиваем каждый символ в span и задаем ему цвет light_text += "<span style='color: " + array_color[i] + "'>" + light_part_text.substr(i, 1) + "</span>"; } // склеиваем две части текста new_text = first_part_text + light_text; } // заменяем текст в блоке element.html(new_text); } }
И пример использования:
$(document).ready(function(){ // после загрузки страницы вызываем функцию // обрезание с осветлением cutLongString($('.example_div'), 200, true); // обрезание без осветления // cutLongString($('.example_div'), 200, false); });
На этом все, если необходимо, то можете скачать рабочий исходник — тут.
Столкнулся с проблемой: ваш скрипт корректно считает латинские символы, но, почему-то, не работает (у меня, во всяком случае) с кириллицей. Буду благодарен, если подскажете, с чем это может быть связано)
Дополнение: всё корректно работает, это я невнимательный :)
Здравствуйте!
А как сделать что бы в конце была кнопка «прочитать весь текст» и что бы он плавно раскрывался?
Спасибо!
Смотри тут http://vk-book.ru/plavnyj-spojler-dlya-sajta-na-jquery/
Просто вместо «заголовка» поставь кнопку.