Сегодня сделаем плагин 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



