Реализовать постепенную анимацию
Есть картинки, которые представлены в виде списка (<li>)
По умолчанию opacity 0 (прозрачные) Хочу чтобы они после загрузки страницы страницы возвращались из прозрачность. Реализую это с помощью jquery animate Хочу сделать чтобы они возвращались из анимации не все сразу, а постепенно. То есть сначала одна, через секунду вторая, третья и т.д. Полагаю для этого мне понадобится setTimeout. Правилен ли ход моих мыслей или можно сделать проще? Как лучше это все реализовать? Задать классы картинкам и обращаться к каждому из них по отдельности?? Или как-нибудь сделать с помощью цикла for? |
для начала ,прочитать как работает jquery animate когда их несколько и всё сведётся к 20-25 символам
|
имеете в виду callback?
то есть присвоить каждому <li> свой класс, и по очереди выполнять функцию animate? А нельзя ли (я где-то читал, но забыл где..) поочередно обращаться к рядом лежащему <li> ? |
1 получить необходимые объекты через селектор
2 навесить на них всех анимате(они будут выполняться последовательно как только отработает один -начнёт работать другой) если между ними нужна пауза -есть несколько способов. от ... и до изменять прозрачность до несуществующих пределов -вот и пауза появиться Цитата:
Цитата:
|
В квери можно устанавливать задержку перед след. эффектом. Таким образом, код упрощается.
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<ul>
<li><img src="http://cs9775.userapi.com/g34580657/e_0b7a4d23.jpg"></li>
<li><img src="http://cs941.userapi.com/g1074652/e_1b5f8f2e.jpg"></li>
</ul>
<script>
$('img').each(function(i){
// i - индекс текущего элемента в коллекции
$(this).css({opacity:1, display:'none'}).delay(i*1000+600).fadeIn(600);
// задержка для первой ---> 1000*0+600 => 600
// для второй ----> 1000*1+600 => 1600
// т.е. между появлениями разница в 1 сек.
});
</script>
|
Цитата:
Не знаю это ли вы имели в виду. Получилось реализовать вот так:
<script type="text/javascript">
$(document).ready(function(){
$("#category_img li:first").animate ({ //первый элемент li
opacity:1
}, 1000 );
$("#category_img li:first + li").animate({ //второй
opacity:1
}, 2000 );
$("#category_img li:first + li + li").animate({ //третий
opacity:1
}, 3000 );
});
</script>
Все работает, но сам код слишком громоздкий. :( |
Цитата:
Да, этот лучше чем у меня! Спасибо! |
Сейчас применил версию реализованную через each .
Обидно что из-за display:none, элементы появляются не из места где должны находится. А можно как-нибудь ужать мой скрипт? Вот этот который :
<script type="text/javascript">
$(document).ready(function(){
$("#category_img li:first").animate ({ //первый элемент li
opacity:1
}, 1000 );
$("#category_img li:first + li").animate({ //второй
opacity:1
}, 2000 );
$("#category_img li:first + li + li").animate({ //третий
opacity:1
}, 3000 );
});
</script>
|
Цитата:
$(this).css({opacity:1, display:'none'}).delay(i*1000+600).fadeIn(600);
Цитата:
$(function(){
$("#category_img li").each(function(i){
$(this).delay(1000*i).animate ({
opacity:1
}, 1000 );
});
});
|
А ну вот, что и хотел..
Возник вопрос по тегу <noscript>, точнее по его реализации. Можно ли в нем прописывает css правила и ставить его в <head>? Дело в том, что с практической стороны этот код в хеде работает:
<head>
<noscript>
<style type="text/css">#category_img li{opacity:1;}</style>
</noscript>
<!--если отключен js, картинки вернут свойство opacity:1-->
</head>
Код при этом остается валидным. Но информации по <noscript> в данном применении я не встречал. Можно ли так писать? |
| Часовой пояс GMT +3, время: 17:06. |