Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Мой скрипт-снегопадик :) (https://javascript.ru/forum/project/1671-mojj-skript-snegopadik.html)

Александр Михалицын 01.09.2008 13:56

Мой скрипт-снегопадик :)
 
http://javascript.ru/blog/aleksandr-...snowjs-library

Не судите строго у меня сегодня праздник :)
1 Сентября завтра в школу :)))

ZoNT 01.09.2008 14:06

единственное, что при сдвигании снежинки за правую грань появляется горизонтальный скролл. А так прикольно.

Александр Михалицын 01.09.2008 14:07

Хм, а какой браузер.
То что прикольно-то понятно, насколько я это качественно написал,
как вы оцените?

Кстати, проблема скролла решается путем изменения настроек,
некоторые браузеры действительно себя ведут странно и появляется
скролл, хотя фактически снежинка не может приблизиться к краю
экрана ближе чем на 54 пиксела, тоесть той величины которая указана
в "константе" g.

Откройте файл snow.js найдите переменную g и увеличивайте по немножку пока скролл
не перестанет появляься, подобранное значение самое оптимальное... ;)

ZoNT 01.09.2008 14:27

появляется в твоём примере и в ИЕ, и в ФФ.

Александр Михалицын 01.09.2008 14:37

ХМ, а версии какие.. я обязательно займусь оптимизацией переменной g :)

ZoNT 01.09.2008 14:39

По коду:
if (settings[0]) // Выбор тега снежинки в зависимсти от опции settings[0]
76 {
77 flake_tag = 'img';
78 } else {
79 flake_tag = 'div';
80 }

Я бы не использовал имэдж, а использовал только див с бэком или без.

70 var clientWidth = document.getElementById(settings[6]).clientWidth;
71 var clientHeight = document.getElementById(settings[6]).clientHeight;
91 var flake_obj = document.getElementById(settings[6]).appendChild(flake_obj);

Много раз обращаясь к этому методу ты замедляешь выполнение кода.
Лучше один раз получить элемнт, сохранить его в переменную и использовать.

function delete_flakes()
105{
106 for (var id=1; id<=settings[5]; id++)
107 {
108 var flake_obj = document.getElementById('flake' + id);
109 document.getElementById(settings[6]).removeChild(flake_obj);
110 }
111}


Делать на каждой итерации document.getElementById(settings[6]) - плохо.

function stop_snowfall()
157{
158 delete_flakes();
159 clearInterval(positions);
160}


Удаляешь снежинки, а в этот момент сработал интервал (так как он не отключен). Что будет??? Правильно:
var flake_obj = document.getElementById('flake'+i); /* Получаем объект снежинки */
Получим undefined/
121 flake_obj.left += (flake_obj.speedX + flake_obj.amplitude*Math.cos(flake_obj.top*flake_o bj.tempo))*dt;
получим ошибку, так как у undefined нет свойства .left

Александр Михалицын 01.09.2008 15:10

Черт, спасибо за "свежий глаз". ;)
Версия v.2.6 "на носу" :)

ZoNT 01.09.2008 15:12

var arr = []; быстрее и короче, чем
var arr = new Array()

Это ещё вдогонку...

ZoNT 01.09.2008 15:13

И ещё я бы убрал всё это из глобального контекста.

Александр Михалицын 01.09.2008 15:49

ХМ, убрать...
В массив какой-нибудь засунуть,
а убрать, это ведь настройки! ;)
Я так понял вы говорите про
g, k, m, alpha, dt, и.др,
подумаю над объединением их в массив...


Часовой пояс GMT +3, время: 22:22.