Привет!
Сейчас давайте рассмотрим работу, пожалуй одной из самых распространённых библиотек для javascript - scriptaculous.
Scriptaculous надстройка над другим фреймворком - prototypejs.
Она состоит из частей:
Сейчас же я покажу как работать с эффектами, вернее не работать, а как создать собственный эффект.
Но сначала пару слов об эффектах, ну то есть немного теории.
Все эффекты наследуются от Effect.Base.
Наследуемый эффект может определить 3 необязательных метода:
Сейчас перейдём от теории к практике. Сделаем свой эффект.
Сейчас давайте рассмотрим работу, пожалуй одной из самых распространённых библиотек для javascript - scriptaculous.
Scriptaculous надстройка над другим фреймворком - prototypejs.
Она состоит из частей:
- Effects - включает различные эффекты и также помощники.
- Behaviours - это drag, drop, sort, и работа с формами.
- Controls - аякс и автокомлитеры
- Miscellaneous - это "другое" или остальное, сюда входят тесты (unit testing), звук (sound), создание элементов и узлов из элементов (builder)
Сейчас же я покажу как работать с эффектами, вернее не работать, а как создать собственный эффект.
Но сначала пару слов об эффектах, ну то есть немного теории.
Все эффекты наследуются от Effect.Base.
Наследуемый эффект может определить 3 необязательных метода:
- setup() - этот метод вызывается до начала выполнения эффекта, и делает необходимые настройки, например там можно определить, некоторые нужные переменные, и так далее.
- update(pos) - вызывается для каждой итерации. Аргумент pos - это текуший кадр.
- finish() - вызовется после выполнения эффектов.
Сейчас перейдём от теории к практике. Сделаем свой эффект.
Effect.MyEffect = Class.create(Effect.Base, { /* initialize - метод-конструктор для эффекта, принимает аргументы< element - это id элемента. setting - необязателен, я его упомянул для того, чтобы показать, что он есть, это также дополнительные настройки, которые могу использоваться в вашем эффекте. */ initialize: function(element, setting) { this.element = $(element); //бросаем исключение, если элемент не найден. if(!this.element) throw(Effect._elementDoesNotExistError); this.start(setting); }, setup: function() { Effect.tagifyText(this.element); //разбиваем элемент this.letters = this.element.select('span'); }, update: function(position) { var F = position < 0.5 ? 2*position: 2*(1-position); var f_pos; var s_pos; this.letters.collect(function(letter, j){ f_pos = Math.sin(position)*15*F; s_pos = - f_pos; if(j%2==0) letter.setStyle({top: Math.round(f_pos) + 'px'}); else letter.setStyle({top: Math.round(s_pos) + 'px'}); }); } });Вот и всё! Эффект готов. Для примера, этот эффект принимает id элемента, например, заголовка <h1>Lorem ipsum dolore</h1> Но также можно передать и Id параграфа, тогда будет веселее. А сейчас более подробно. В методе-конструкторе мы принимает id, и оборачиваем его $(), если элемент не найден будем бросать исключение. В методе setup, с помощью tagifyText, мы оборачиваем каждую букву элемента в span. Затем мы просто отбираем все элементы. Как и говорилось в update() вся магия, но суть в чём, если чётное в одну сторону, если нет, то в другую. Формула, которая я использовал, не несёт в себе какой-либо смысловой нагрузки, поэтому понять не пытайтесь. (Хотя на самом деле это простая формула синуса). Затем мы на полученых значениях сдвигаем либо вверх, либо вниз отобранные span'ы. Вот и всё. Просто же.
живой бы пример... хотя бы на том самом pastehtml.com
ОтветитьУдалитьhttp://jsfiddle.net/gWERx/
УдалитьСделал, также немного доработал, чтобы эффект был виден, потому что при первом разе его можно и не заметить.