Эффект бегучих строк на jQuery

Сегодня сделаем плагин jQuery, который способен тасовать текст любого элемента DOM. Такой эффект можно применить для заголовков, логотипов и для слайдшоу.

Код

Сперва, будем строить скелет jQuery плагина. Поместим код внутри самовыполняющейся анонимной функции

assets/js/jquery.shuffleLetters.js

(function($){

    $.fn.shuffleLetters = function(prop){

        // Обрабатываем аргументы
        var options = $.extend({
            // Значения по умолчанию
        },prop)

        return this.each(function(){
            // Основной код плагина будет здесь
        });
    };

    // Вспомогательная функция

    function randomChar(type){
        // Генерируем и  возвращаем случайный символ
    }

})(jQuery);

Затем будем работать с вспомогательной функцией randomChar(). Она может брать один из возможных значений “lowerLetter“, “upperLetter” или “symbol“ и возвращать случайный символ.

function randomChar(type){
    var pool = "";

    if (type == "lowerLetter"){
        pool = "abcdefghijklmnopqrstuvwxyz0123456789";
    }
    else if (type == "upperLetter"){
        pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    }
    else if (type == "symbol"){
        pool = ",.?/\\(^)![]{}*&^%$#'\"";
    }

    var arr = pool.split('');
    return arr[Math.floor(Math.random()*arr.length)];
}

Для замены можно использовать один набор значений, но такое разделение дает лучший эффект.

Пишем само тело плагина.

$.fn.shuffleLetters = function(prop){

	var options = $.extend({
		"step"		: 8,			// Сколько раз должны меняться символы
		"fps"		: 25,			// Кадров в секунду
		"text"		: "", 			// Использовать данный текс вместо содержимого
		"callback"	: function(){}	// Выполняется при заверешении анимации
	},prop)

	return this.each(function(){

		var el = $(this),
			str = "";

		// Для предотвращения одновременных анимаций используем флаг

		if(el.data('animated')){
			return true;
		}

		el.data('animated',true);

		if(options.text) {
			str = options.text.split('');
		}
		else {
			str = el.text().split('');
		}

		// Массив types содержит типы символов
		// Массив letters сохраняет положение символов, отличных от пробела

		var types = [],
			letters = [];

		// Looping through all the chars of the string

		for(var i=0;ilen){

				// Анимация завершена. Обновляем флаг и
				// запускаем возвратную функцию

				el.data('animated',false);
				options.callback(el);
				return;
			}

			// Все работы выполняются здесь
			for(i=Math.max(start,0); i < len; i++){

				//Аргумент start и опция step ограничивают символы,
				//которые обрабатываются за один раз

				if( i < start+options.step){
					// Генерируем случайный символ в данной позиции
					strCopy[letters[i]] = randomChar(types[letters[i]]);
				}
				else {
					strCopy[letters[i]] = "";
				}
			}

			el.text(strCopy.join(""));

			setTimeout(function(){

				shuffle(start+1);

			},1000/options.fps);

		})(-options.step);

	});
};

Плагин будет принимать либо содержимое элемента DOM, для которого он был создан, или свойства текста, переданного в качестве аргумента. Затем он разбивает строку на символы и определяет тип каждой из них. После чего использует функцию перемешивания SetTimeout (), чтобы на каждом шагу называть себя, случайный строки и обновленный элемент DOM.

Демонстрация показывает результат реализацию данной возможности.

assets/js/script.js

$(function(){

	// Контейнер - элемент DOM;
	// userText - поле для текста

	var container = $("#container")
		userText = $('#userText');

	// Тасуем содержание контейнера
	container.shuffleLetters();

	// Привязываем события
	userText.click(function () {

	  userText.val("");

	}).bind('keypress',function(e){

		if(e.keyCode == 13){

			// Нажата клавиша ENTER

			container.shuffleLetters({
				"text": userText.val()
			});

			userText.val("");
		}

	}).hide();

	// Делаем паузу на 4 секунды

	setTimeout(function(){

		// Тасуем контейнер пользовательским текстом
		container.shuffleLetters({
			"text": "Проверьте его сами!"
		});

		userText.val("Введите что-нибудь...").fadeIn();

	},4000);

});

Исходник
Источник: tutorialzine.com

Полезные ссылки: агентство недвижимости
Категория: JQuery, Дизайн, Новости Теги: 

Популярные записи:

Блокирование пиратских атак Блокирование пиратских атак
Плагины jQuery для проигрывания медиа файлов Плагины jQuery для проигрывания медиа файлов
Древовидные комментарии и рейтинг комментариев в WordPress Древовидные комментарии и рейтинг комментариев в WordPress
Поисковая оптимизация картинок WordPress Поисковая оптимизация картинок WordPress

Оставить комментарий или два

Отправить коментарий

Test

Яндекс.Метрика