Мой скрипт-снегопадик :)
http://javascript.ru/blog/aleksandr-...snowjs-library
Не судите строго у меня сегодня праздник :) 1 Сентября завтра в школу :))) |
единственное, что при сдвигании снежинки за правую грань появляется горизонтальный скролл. А так прикольно.
|
Хм, а какой браузер.
То что прикольно-то понятно, насколько я это качественно написал, как вы оцените? Кстати, проблема скролла решается путем изменения настроек, некоторые браузеры действительно себя ведут странно и появляется скролл, хотя фактически снежинка не может приблизиться к краю экрана ближе чем на 54 пиксела, тоесть той величины которая указана в "константе" g. Откройте файл snow.js найдите переменную g и увеличивайте по немножку пока скролл не перестанет появляься, подобранное значение самое оптимальное... ;) |
появляется в твоём примере и в ИЕ, и в ФФ.
|
ХМ, а версии какие.. я обязательно займусь оптимизацией переменной g :)
|
По коду:
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 |
Черт, спасибо за "свежий глаз". ;)
Версия v.2.6 "на носу" :) |
var arr = []; быстрее и короче, чем
var arr = new Array() Это ещё вдогонку... |
И ещё я бы убрал всё это из глобального контекста.
|
ХМ, убрать...
В массив какой-нибудь засунуть, а убрать, это ведь настройки! ;) Я так понял вы говорите про g, k, m, alpha, dt, и.др, подумаю над объединением их в массив... |
| Часовой пояс GMT +3, время: 05:55. |