Верша свой круг, назначенный от века,
Роняет Небо наземь хлопья снега...
Мария Семенова
После жаркого-жаркого лета (или не жаркого, как в этом году в Москве) и дождливой осени снежная зима приносит с собой предпраздничное настроение — близится Новый год, когда родные и близкие собираются за одним столом теплой компанией и радуют друг друга застольными беседами. Вот и мы порадуем на этот раз снежным настроением наши сайты.
Начинаем с создания объекта — снежинки. Общий принцип выберем такой — объект конструирует полностью готовую снежинку, а пользователь может уже созданный экземпляр полностью настраивать под себя.
Определим основные параметры:
- speed — количество миллисекунд между двумя движениями снежинки;
- deltaX — максимальное отклонение по оси X снежинки от предыдущего в пикселях;
- deltaY — расстояние смещения снежинки между двумя движениями в пикселях;
- imgSrc — путь к картинке, изображающей снежинку.
Сами по себе снежинки летать не будут — их надо поместить в контейнер. В качестве контейнера для снежинки будем использовать объект DIV. В дальнейшем, задавая параметры этого контейнера, можно настраивать внешний вид снежинки.
Вы помните, что в разных браузерах (а если не повезло, то и в разных версиях одного и того же браузера) один и тот же код может работать по-разному? В частности, по-разному задаются координаты контейнера. Для определения способа нам хватит названия браузера. Чтобы его выяснить, обратимся к свойству navigator.appName — в нем содержится точное название браузера, в котором открыта страница, чем мы и воспользуемся. Будем считать, что если в строке присутствует название Internet Explorer, то так оно и есть, а во всех остальных случаях мы будем рассчитывать на FireFox. В Opera, к счастью, все тоже работает.
Выбрав браузер, мы определяем функцию позиционирования снежинки setPositionXY();
Полный текст вы можете увидеть во фрагменте кода «Проверка браузера».
Проверка браузера |
|
В отдельный метод calc() выделим все вычисления новых координат снежинки. В принципе, формулу для траектории снежинки можно взять любую — мы за основу выбрали синусоидальную (фрагмент кода «Новые координаты»).
Новые координаты |
|
Зная координаты, мы можем переместить контейнер со снежинкой на новое место — с помощью метода move().
Перемещение |
|
Это факт: на самом деле наш снегопад — частный случай партикловых систем, применяющихся в играх для создания дымов, взрывов и подобных эффектов. О партиклах в нашем журнале уже писал Ричард Псмит в №10 за 2005 год.
Но нам нужно будет переместить снежинку не один раз. JavaScript позволяет вызывать определенное действие (функцию) по истечении заданного промежутка времени — с помощью стандартного метода setTimeout объекта window.
Мы создадим еще один метод, который перемещает снежинку и затем вызывает сам себя через время, заданное в параметре this.speed. Время у нас измеряется в миллисекундах.
Шаг снежинки |
|
Итак, устанавливаем снежинку на старт и добавляем подготовленный контейнер к документу. Затем плодим и размножаем снежинки, то есть получаем экземпляры объекта snowflake и кладем их в один большой массив.
Снежинки у нас будут разные:
- большие — случайным образом выбранные картинки: и
- помельче,
- и наконец, просто символ *.
Скорость передвижения и интервал между перемещениями будем выбирать случайно.
Этот фрагмент кода — в листинге «Снегопад начинается».
Снегопад начинается |
|
Вот, собственно говоря, и все. Построенный объект snowflake легко настраивается именно благодаря своим открытым методам и отделением оформления от вычислений. Так что каждый читатель при желании сможет переделать этот снегопад к 14 февраля — дню Святого Валентина — в сердечки, летящие вверх.
Полностью код страницы и картинки к этой статье вы найдете на нашем диске. А пока — с Новым годом!