Привет: Гость | Регистрация | Вход

Привет: Гость

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь! Гости не могут просматривать РАЗДЕЛЫ СТАТЕЙ И ФАЙЛЫ

Форум переехал! Новый адрес www.aahc.comze.com ЗАХОДИТЕ ТУДА! МЫ ВАМ РАДЫ!
Меню сайта



 

Обновить страницу!
 



  • Страница 1 из 1
  • 1
Модератор форума: GrinGo  
Анимация со сменой прозрачности: Fade Id, Fade Out
GrinGoДата: Пятница, 21.11.2008, 11:55 | Сообщение # 1
Admin
Группа: AdmInS
Сообщений: 253
Репутация: 2
Статус: Offline
Дизайнеры любят использовать анимационный эффект изменения прозрачности, заставляя элементы приложения возникать из ниоткуда (Fade Id) или исчезать в никуда (Fade Out).
Задача

Чтобы fade-анимация не ставила в тупик JavaScript-разработчиков принято решение написать небольшое руководство как это сделать малой кровью, не подключая громоздкие js-фреймворки. Что нам необходимо:
Знать как кроссбраузерно задавать прозрачность
Сделать таймер, чтобы работала анимация

Первая задача (наиболее трудоемкая), к счастью, успешно решена Игорем Цыгырлашем в статье CSS прозрачность (css opacity, javascript opacity). Там же есть небольшой черный ящик в виде библиотеки для плавного изменения прозрачности элементов, но мне она не приглянулась из-за нескольких минусов.
Объект

Итак, после некоторой переработки кода с tigir.com и на основе собственной практики написания фейд-эффектов получилась такая библиотечка:
var fade = { // Namespace
step : 0.05,
delay : 20, // ms
timer : null,
setOpacity : function(elem, nOpacity) {
if (typeof elem == 'string') elem = document.getElementById(elem);
var props = ['MozOpacity', 'KhtmlOpacity', 'opacity'];
for (var i in props) {
if (typeof elem.style[props[i]] == 'string') {
elem.style[props[i]] = nOpacity;
return;
}
}
// IE 6+
try {
nOpacity = 100 * parseFloat(nOpacity);
if ((oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha)) oAlpha.opacity = nOpacity;
else elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")";
} catch (e) {
// IE <= 5.5 OR Opera < 9 OR another browser. Do nothing
}
},
_out : function(id, from, to, callback) {
from -= this.step;
from = from <= to ? to : from;
if (this.doit(id, from, to, callback))
this.timer = setTimeout("fade._out('"+id+"', "+from+", "+to+", '"+(callback ? callback : '')+"')", this.delay);
},
_in : function(id, from, to, callback) {
from += this.step;
from = from >= to ? to : from;
if (this.doit(id, from, to, callback))
this.timer = setTimeout("fade._in('"+id+"', "+from+", "+to+", '"+(callback ? callback : '')+"')", this.delay);
},
doit : function(id, from, to, callback) {
this.setOpacity(id, from);
clearTimeout(this.timer);
if (from == to) {
if (callback) eval(callback+'()');
} else return true;
}
}

Сразу же смотрим скрипт в работе!

Разберем немного сам объект:
fade — это неймспейс, введен исключительно для того, чтобы не было случайного пересечения глобально объявленных переменных или функций с уже имеющимся на вашем сайте кодом.
setOpacity — самый главный метод объекта fade, который и задает прозрачность элемента. В качестве первого аргумента принимает ссылку на элемент или его идентификатор. Второй аргумент — значение прозрачности, которое необходимо установить. Метод появился на свет благодаря функциям getOpacityProperty и setOpacityProperty с tigir.com
_in и _out — методы для анимации появления и исчезновения соот-но. Принимают в качестве аргументов идентификатор элемента, значения "от" и "до" и функцию обратного вызова (необязательный аргумент). В приводимом выше примере у кнопки следующий обработчик клика:
fade._out('imgId', 1, 0, 'stopHide');
Читается так: "необходимо уменьшать прозрачность элемента с идентификатором 'imgId' от еденицы до нуля и после достижению нуля вызвать функцию с именем 'stopHide'". Так оно и работает.
Важно! Все аргументы кроме последнего являются обязательными.
Изменение прозрачности происходит пошагово и его скорость регулируется двумя свойствами: step — шаг между двумя изменениями и delay — задержка между итерациями. Изменяйте их для увеличения или снижения скорости анимации.

Что нового в коде по сравнению с примером Игоря Цыгырлаша? Во-первых оптимизированный метод setOpacity, но это только технически, ничего принципиально нового там нет. А во-вторых, добавлены колбэки, необходимость которых возникала в каждом случае практического применения описанных эффектов.

Да, и еще, такая простая структура объекта может подойти для любой другой анимации. Можно добавить метод плавно уменьшающий высоту объекта — и еще один эффект готов.
Проверено в:

WIN: IE6, IE7, FF1.5+, Safari 3, Opera 9+, Chrome

Точно не будет работать в ИЕ5.5 (и ниже) и в Операх ниже девятой версии.

Александр Бурцев 5 ноября 2008

© Все права на данную статью принадлежат порталу fastcoder.org. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.


Злой одМиН
 
  • Страница 1 из 1
  • 1
Поиск:






 
© Алькапоша 2008 год
   



  • Каталог сайтов Всего.RU
  • автоматический обмен webmoney e-gold