Был откопан мною где-то в 2006-м году еще вообще в другой системе и полностью переделан сначала одним кодером, а затем допилен Шаманом году в 2017-м. Не уверен даже, что от оригинального скрипта осталось, кроме общего списка настроек.
$(document).ready(function () { // the number of snowflakes var snowmax = 65; // the colors for the snow var snowcolor = new Array("#FFF", "#FFF", "#FFF", "#b9dff5", "#FFF"); // the fonts create snowflakes var snowtype = new Array("Times"); // the letter creates snowflake var snowletter = "*"; // speed of sinking var sinkspeed = 0.5; // maximum-size of snowflakes var snowmaxsize = 35; // minimal-size of snowflakes var snowminsize = 8; // the snowing-zone //(1-4: all, left, center, right) var snowingzone = 1; // config end // donnot touch, pls, i donot sure for it var snow = new Array(); var marginbottom = 0; var marginright = 0; var timer; var i_snow = 0; var x_mv = new Array(); var crds = new Array(); var lftrght = new Array(); var browserinfos = navigator.userAgent; var ie5 = document.all && document.getElementById && !browserinfos.match(/Opera/); var ns6 = document.getElementById && !document.all; var opera = browserinfos.match(/Opera/); var browserok = ie5 || ns6 || opera; function randommaker(range) { rand = Math.floor(range * Math.random()); return rand; } for (i = 0; i <= snowmax; i++) { $('body').append("<span id='s" + i + "' style='position:absolute;top:-" + snowmaxsize + "'>" + snowletter + "</span>"); } function initsnow() { if (ie5 || opera) { marginbottom = document.body.scrollHeight; marginright = document.body.clientWidth - 15; } else if (ns6) { marginbottom = document.body.scrollHeight; marginright = window.innerWidth - 15; } var snowsizerange = snowmaxsize - snowminsize; for (i = 0; i <= snowmax; i++) { crds[i] = 0; lftrght[i] = Math.random() * 15; x_mv[i] = 0.03 + Math.random() / 10; snow[i] = document.getElementById("s" + i); snow[i].style.fontFamily = snowtype[randommaker(snowtype.length)]; snow[i].size = randommaker(snowsizerange) + snowminsize; snow[i].style.fontSize = snow[i].size + 'px'; snow[i].style.color = snowcolor[randommaker(snowcolor.length)]; snow[i].style.zIndex = 2; snow[i].sink = sinkspeed * snow[i].size / 5; if (snowingzone == 1) { snow[i].posx = randommaker(marginright - snow[i].size) }; if (snowingzone == 2) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) }; if (snowingzone == 3) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 4 }; if (snowingzone == 4) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 2 }; snow[i].posy = randommaker(2 * marginbottom - marginbottom - 2 * snow[i].size); snow[i].style.left = snow[i].posx + 'px'; snow[i].style.top = snow[i].posy + 'px'; }; movesnow(); } function movesnow() { for (i = 0; i <= snowmax; i++) { crds[i] += x_mv[i]; snow[i].posy += snow[i].sink; snow[i].style.left = snow[i].posx + lftrght[i] * Math.sin(crds[i]) + 'px'; snow[i].style.top = snow[i].posy + 'px'; if (snow[i].posy >= marginbottom - 2 * snow[i].size || parseInt(snow[i].style.left) > (marginright - 3 * lftrght[i])) { if (snowingzone == 1) { snow[i].posx = randommaker(marginright - snow[i].size) }; if (snowingzone == 2) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) }; if (snowingzone == 3) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 4 }; if (snowingzone == 4) { snow[i].posx = randommaker(marginright / 2 - snow[i].size) + marginright / 2 }; snow[i].posy = 0; } } var timer = setTimeout(movesnow, 50); } if (UserID !== 200 && UserID !== 397 && UserID !== 375 && UserID !== 18 && UserID !== 418 && UserID !== 41 && UserID !== 519) { setTimeout(initsnow, 1000); } });
Про настройки:
// the number of snowflakes
var snowmax = 65; - количество снежинок на экран. В оригинале скрипта не рекомендовалось ставить больше 15. Сейчас я б сказал, что идеальное - 35.
Также учтите, что объекты динамичные и своей обработкой могут заметно жрать ресурс на слабых устройствах, могут мешать мобильным. Чем больше снежинок - тем сильнее могут быть тормоза на таком слабом устройстве.// the colors for the snow
var snowcolor = new Array("#FFF", "#FFF", "#FFF", "#b9dff5", "#FFF"); - таких цветов будут наши снежинки. Можно добавлять цветов больше или меньше, последнее обязательно без запятой.// the fonts create snowflakes
var snowtype = new Array("Times"); - шрифт, из которого будут использоваться символы для снежинок// the letter creates snowflake
var snowletter = "*"; - символ, имитирующий снежинку (в нашем случае звёздочка). Можно заменять точками, может, вы вообще хотите, чтобы по экрану летала буква О. Или А. Х)// speed of sinking
var sinkspeed = 0.5; скорость падения// maximum-size of snowflakes
var snowmaxsize = 35; - максимальный размер снежинок (шрифтовой)// minimal-size of snowflakes
var snowminsize = 8; - минимальный размер снежинок (шрифтовой)
Еще обращу внимание сюда:
if (UserID !== 200 && UserID !== 397 && UserID !== 375 && UserID !== 18 && UserID !== 418 && UserID !== 41 && UserID !== 519) {
setTimeout(initsnow, 1000);
Выделенные синим пара чисел (остальные тоже) - пользовательские айди. Эта строка была сделана для того, чтобы отключить скрипт снега для тех, кого этот снег на экране бесит. Количество использующихся айди можно сократить, технически, можно вообще убрать.
Но вот такой вот дружелюбный снег.