Mootools для начинающих, урок №2

22 апреля 2009, 13:58 Павел Марковнин JavaScript рейтинг +19-

Mootools для начинающихПривет!

В прошлый раз мы начали знакомство с Mootools с рассмотрения получения DOM элементов, научились манипулировать их свойствами и привязывать события к элементам.

Сегодня мы посмотрим, как делать простую анимацию различных свойств элементов с помощью классов Fx.Tween и Fx.Morph.

Для начала рассмотрим, с помощью чего можно делать анимацию свойств элемента. В Mootools есть 2 очень хороших класса — Fx.Tween, который используется для перехода от одного значения CSS свойства к другому, и Fx.Morph, который делает тоже самое, но сразу для нескольких свойств.

Допустим, мы хотим, чтобы при наведении на все ссылки внутри блок с id="links-block" цвет ссылок плавно менялся с синего на красный. Сделаем ссылки побольше, чтобы было видно изменение. HTML тут совсем простой, так что рассмотрим только JavaScript:

<script type="text/javascript">
window.addEvent('domready', function() {
var duration = 350; // время перехода

// проходим по всем ссылкам внутри контейнера
$each($$('#links-block a'), function(item) {
// событие при наведении
item.addEvent('mouseover', function(e) {
e.stop(); // останавдиваем событие наведения
var colorFx = new Fx.Tween(this, { 'duration': duration }); // создаем новый переход с указанной продолжительностью
colorFx.start('color', '#E00'); // делаем переход цвета от текущего до красного
});

// все точно так же
item.addEvent('mouseout', function(e) {
e.stop();
var colorFx = new Fx.Tween(this, { 'duration': duration });
colorFx.start('color', '#00E');
});
});
});
</script>

Все замечательно, смотрим пример.

Теперь предлагаю немного усложнить задачу — в дополнение к изменению цвета, меняем еще и фон. Скажем, был белый фон и синий текст, стал синий фон и белый текст. До этого мы использовали класс Fx.Tween, а сейчас будет работать с Fx.Morph:

<script type="text/javascript">
window.addEvent('domready', function() {
var duration = 350; // время перехода

// проходим по всем ссылкам внутри контейнера
$each($$('#links-block a'), function(item) {
// событие при наведении
item.addEvent('mouseover', function(e) {
e.stop(); // останавдиваем событие наведения
var colorFx = new Fx.Morph(this, { 'duration': duration }); // создаем новый переход с указанной продолжительностью
colorFx.start({
'color': '#FFF',
'background-color': '#00E'
}); // делаем переход цвета и фона
});

// все точно так же
item.addEvent('mouseout', function(e) {
e.stop();
var colorFx = new Fx.Morph(this, { 'duration': duration });
colorFx.start({
'color': '#00E',
'background-color': '#EBEBEB'
});
});
});
});
</script>

Вот наш пример.

Кстати, интересной особенностью класса Fx.Morph является то, что он позволяет делать переход между двумя классами элемента, т.е. если у вас был блок с классом first-class, по при помощи Fx.Morph его можно плавно перевести в класс second-class. По-моему, это довольно полезно.

Кроме того, вы можете задавать как именно будут меняться ваши значения: линейно, квадратично, кубически и так далее. Скажем, если вы хотите, чтобы в предыдущем примере изменение происходило кубически, то в объявление перехода нужно добавить аргумент transition:

...
var colorFx = new Fx.Tween(this, {
'transition': 'cubic:out'
});
...

Не забудьте посмотреть полный список функций изменения.

 

Думаю, на сегодня все. В следущий раз опять посмотрим что-нибудь интересное. 

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 6

RSS
  • Аватарка
    22 апреля 2009 в 19:05 Павел
    Если быстро провести мышкой по всем элементам - они сильно моргают и иногда не возвращаются в исходное положение.

    Мне кажется, что-то не то в классе. Сначала нужно вырубить таймер, потом взять текущее значение. Там какая-то путаница.

    Когда-то я делал подобный класс, но не для Mootools. Мне удалось победить эту проблему.
  • Аватарка
    23 апреля 2009 в 10:01 ]]>sergy]]>
    >Если быстро провести мышкой по всем элементам - они сильно моргают и иногда не возвращаются в исходное положение.
    Пробовал в ФФ нормально, в Опере действительно наблюдается глюк
  • Аватарка
    23 апреля 2009 в 11:41 _cr
    fx 3.0.9 - глюк подтвержаю
  • Аватарка
    23 апреля 2009 в 21:31 Anton
    Уберите рекламу вначале поста из РСС.
  • Аватарка
    25 апреля 2009 в 20:24 ]]>БОШ]]>
    Действительно, в последней FF неприятно мерцает. Попробуй в опциях помимо 'duration' задать 'link': 'chain' или 'cancel'. Может поможет..
  • Аватарка
    25 апреля 2009 в 20:26 ]]>БОШ]]>
    В предпросмотре ' экранируются в '.
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>