Лисья нора




Лисья нора

Главная | Графика и Дизайн | Регистрация | Вход Цвет Сайта: Стандартный Поменять цвет Поменять цвет Морская волна Для блондинкафф Без картинок Здравствуйте, Гость | RSS
| Эффект движущейся тени в пяти строчках jQuery | Категория: HTML и CSS

Начнем с простой анимации jQuery

Если у вас есть опыт работы с jQuery, то вы легко реализуете анимацию. В примере происходит перемещение ‘точки’ слева направо с использованием функции animate():

1$("#ball").stop(true).animate({left:500}, 1000).animate({left:0}, 1000);

Результат:

 

Для создания круга используется CSS3 (Пользователи IE будут видеть квадрат!):

01#ball {
02 display: block;
03 width: 80px;
04 height: 80px;
05 background: #333;
06 -moz-border-radius: 40px; /* FF1+ */
07 -webkit-border-radius: 40px; /* Saf3+, Chrome */
08 border-radius: 40px; /* Opera 10.5, IE 9 */
09 position: absolute;
10 top: 50px;
11 left: 50px;
12}

Скучно? Движение тени

jQuery или даже CSS3 не имеют встроенных эффектов или свойств для создания теней (имеются ввиду ситуации с более чем одна тень для объекта). Может ли jQuery сделать что-то наподобие такого?

Демонстрация движущейся тени

Конечно! jQuery может создать такой эффект. Трюк заключается в следующем: создадим несколько изображений, затем сделаем так, что они будут следовать за первой анимацией и затухать… Нет, не так. Давайте посмотрим на пример выше. В jQuery есть функция clone(). Метод .clone() - это удобный способ клонировать элементы на странице. Используя данный метод, вы можете сделать множество копий определенного элемента. Заметьте, что нет смысла создавать копии элементов HTML с одинаковым атрибутом ID. Лучше использовать имя класса для элементов. Однако это не означает, что нет способа дублировать элементы по ID.

В данном случае, мы удаляем ID и устанавливаем имя для атрибута класса (создайте стиль css для нового имени класса):

1$("#ball").clone().removeAttr("id").attr({class:"ball"})
2                   .appendTo("#demo");

Пытаемся дублировать круг в соответствующие номера. Однако движение зависит от скорости основного элемента. Вот как мы будем контролировать дублированный элемент по времени. Если движение происходит быстро, мы будем дублировать его быстро, если движение происходит медленно, нужно будет дублировать один или два кадра… Нужно использовать jQuery Timer для таких фокусов.

В каждую единицу времени мы делаем только одну копию.

01$("#ball").everyTime(80, function() { 
02                         
03    $("#ball").clone().removeAttr("id").attr({class:"ball"})
04                   .appendTo("#demo")
05                   .everyTime(480, function() {
06                    $(this).remove();
07    });
08         
09}); 
10                     
11$("#ball").stop(true).animate({left:500}, 1000)
12          .animate({left:0}, 1000, function(){
13                             
14                $("#ball").stopTime();
15                             
16});

Выше приведенный код делает одну копию каждые 80 миллисекунд. Но если не прервать метод clone, то можно наделать достаточно кругов для Олимпийских игр на 100 лет. В каждом everyTime(), мы снова вызываем данные метод, но уже ограничиваем его 480 миллисекунд для удаления дубликата. Подсчитаем, у нас есть 6*(480/80) копий, которые следуют за основным элементом.

Результат:

 

Почти все. Добавим эффект затухания.

01$("#ball").everyTime(80, function() {
02 
03    $(this).animate({left:500}, 1000).animate({left:0}, 1000);
04                         
05    $(this).clone().removeAttr("id").attr({class:"ball"})
06           .appendTo("#demo").fadeOut(480, function() {
07                $(this).remove();
08    });
09         
10});

Результат:

 

Для контролирования времени дублирования вы также может использовать window.setInterval(), чтобы заменить метод Time().

Скучно? А вот эффект для индикации загрузки AJAX!

 

Результат:

01function animateit() {
02       
03    var deg=0;
04    var dif=3;
05 
06    var centerX;
07    var centerY;
08       
09 
10    centerX = $('#demo4').width()/4+20;
11    centerY = $('#demo4').height()/2;
12  
13  
14    $("#ball4").everyTime(1, function(){
15 
16        /* Инкрементируем угол: */
17        deg+=dif;
18 
19        /* Вычисляем анимацию для круга */
20        var eSin = Math.sin(deg*Math.PI/180);
21        var eCos = Math.cos(deg*Math.PI/180);
22 
23        /* Устанавливаем свойства css */
24         
25        $(this).css({
26            top:centerX+120*eSin,
27            left:centerY+120*eCos
28        });
29    });
30      
31    /* Устанавливаем новый таймер для тени с общим количеством 10 теней */             
32    $("#ball4").everyTime(80, function() {
33        $(this).clone().removeAttr("id").attr({"class":"ball"})
34               .appendTo("#demo4").fadeOut(800, function() {
35                            $(this).remove();
36          });
37    });
38       
39}

Ошибка?

Анимация не работает? Используете Windows? Да, нужно признать наличие ошибки использования процессора. Сверхъестественным образом она проявляется только на Windows, даже при использовании ПК с 8Gbs памяти (Windows 7) и на Windows Vista. Однако анимация работает отлично на Mac OS. Если вы пользователь Windows и вам не посчастливилось увидеть демонстрацию, то ниже приведен скриншот с Mac OS.

Индикация загрузки AJAX

 

Вот и все!

Данный эффект может быть использован для любой анимации, если вы хотите использовать движущуюся тень (как такой эффект правильно называется, кстати?). В уроке предложена только идея такой анимации с использованием jQuery.

Данный урок подготовлен для Вас командой сайта ruseller.com


| Категория: HTML и CSS | Добавил: ЛисёноChik | Дата: 14.01.2011, 12:21 | Просмотров: 1496| Комментарии: 2 |Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню Сайта

Вы вошли, как
Ваш IP адрес: 3.133.121.160
Войти на сайт:
Логин:
Пароль:

Размер шрифта:

Поиск


Рассылка

Рассылка на E-mail

rss2email

Наш опрос
Оцените наш сайт
Всего ответов: 737

Друзья сайта




Rambler's Top100 Яндекс цитирования
Хостинг от uCoz Анализ сайта Счетчик цитирования Каталог TUT.BY
Rating All.BY Google-Add.com - Открытый Каталог Сайтов Каталог сайтов Всего.RU