Мой скрипт-снегопадик :)
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, время: 22:22. |