Commit 52a653a12d31d46f01dcfcb59953fc06adcff67d
1 parent
2b5ed0f2
+ snow (Вкл. выкл. снег)
Showing
6 changed files
with
593 additions
and
0 deletions
Show diff stats
3.67 KB
5.53 KB
3.87 KB
1 | + | ||
2 | +.bg2 { | ||
3 | + background: none; | ||
4 | + font-family: Androgyne; | ||
5 | + background-image: url('/img/snow/s1.png'), url('/img/snow/s2.png'), url('/img/snow/s3.png'); | ||
6 | + height: 100%; | ||
7 | + left: 0; | ||
8 | + position: absolute; | ||
9 | + top: 0; | ||
10 | + width: 100%; | ||
11 | + z-index:1; | ||
12 | + -webkit-animation: snow 10s linear infinite; | ||
13 | + -moz-animation: snow 10s linear infinite; | ||
14 | + -ms-animation: snow 10s linear infinite; | ||
15 | + animation: snow 10s linear infinite; | ||
16 | +} | ||
17 | +@keyframes snow { | ||
18 | + 0% {background-position: 0px 0px, 0px 0px, 0px 0px;} | ||
19 | + 50% {background-position: 500px 500px, 100px 200px, -100px 150px;} | ||
20 | + 100% {background-position: 500px 1000px, 200px 400px, -100px 300px;} | ||
21 | +} | ||
22 | +@-moz-keyframes snow { | ||
23 | + 0% {background-position: 0px 0px, 0px 0px, 0px 0px;} | ||
24 | + 50% {background-position: 500px 500px, 100px 200px, -100px 150px;} | ||
25 | + 100% {background-position: 400px 1000px, 200px 400px, 100px 300px;} | ||
26 | +} | ||
27 | +@-webkit-keyframes snow { | ||
28 | + 0% {background-position: 0px 0px, 0px 0px, 0px 0px;} | ||
29 | + 50% {background-position: 500px 500px, 100px 200px, -100px 150px;} | ||
30 | + 100% {background-position: 500px 1000px, 200px 400px, -100px 300px;} | ||
31 | +} | ||
32 | +@-ms-keyframes snow { | ||
33 | + 0% {background-position: 0px 0px, 0px 0px, 0px 0px;} | ||
34 | + 50% {background-position: 500px 500px, 100px 200px, -100px 150px;} | ||
35 | + 100% {background-position: 500px 1000px, 200px 400px, -100px 300px;} | ||
36 | +} | ||
0 | \ No newline at end of file | 37 | \ No newline at end of file |
1 | +/** @license | ||
2 | + * DHTML Snowstorm! JavaScript-based Snow for web pages | ||
3 | + * -------------------------------------------------------- | ||
4 | + * Version 1.43.20111201 (Previous rev: 1.42.20111120) | ||
5 | + * Copyright (c) 2007, Scott Schiller. All rights reserved. | ||
6 | + * Code provided under the BSD License: | ||
7 | + * http://schillmania.com/projects/snowstorm/license.txt | ||
8 | + */ | ||
9 | + | ||
10 | +/*global window, document, navigator, clearInterval, setInterval */ | ||
11 | +/*jslint white: false, onevar: true, plusplus: false, undef: true, nomen: true, eqeqeq: true, bitwise: true, regexp: true, newcap: true, immed: true */ | ||
12 | + | ||
13 | +var snowStorm = (function(window, document) { | ||
14 | + | ||
15 | + // --- common properties --- | ||
16 | + | ||
17 | + this.autoStart = true; // Whether the snow should start automatically or not. | ||
18 | + this.flakesMax = 128; // Limit total amount of snow made (falling + sticking) | ||
19 | + this.flakesMaxActive = 64; // Limit amount of snow falling at once (less = lower CPU use) | ||
20 | + this.animationInterval = 33; // Theoretical "miliseconds per frame" measurement. 20 = fast + smooth, but high CPU use. 50 = more conservative, but slower | ||
21 | + this.excludeMobile = true; // Snow is likely to be bad news for mobile phones' CPUs (and batteries.) By default, be nice. | ||
22 | + this.flakeBottom = null; // Integer for Y axis snow limit, 0 or null for "full-screen" snow effect | ||
23 | + this.followMouse = false; // Snow movement can respond to the user's mouse | ||
24 | + this.snowColor = '#fff'; // Don't eat (or use?) yellow snow. | ||
25 | + this.snowCharacter = '•'; // • = bullet, · is square on some systems etc. | ||
26 | + this.snowStick = false; // Whether or not snow should "stick" at the bottom. When off, will never collect. | ||
27 | + this.targetElement = null; // element which snow will be appended to (null = document.body) - can be an element ID eg. 'myDiv', or a DOM node reference | ||
28 | + this.useMeltEffect = true; // When recycling fallen snow (or rarely, when falling), have it "melt" and fade out if browser supports it | ||
29 | + this.useTwinkleEffect = false; // Allow snow to randomly "flicker" in and out of view while falling | ||
30 | + this.usePositionFixed = false; // true = snow does not shift vertically when scrolling. May increase CPU load, disabled by default - if enabled, used only where supported | ||
31 | + | ||
32 | + // --- less-used bits --- | ||
33 | + | ||
34 | + this.freezeOnBlur = true; // Only snow when the window is in focus (foreground.) Saves CPU. | ||
35 | + this.flakeLeftOffset = 0; // Left margin/gutter space on edge of container (eg. browser window.) Bump up these values if seeing horizontal scrollbars. | ||
36 | + this.flakeRightOffset = 0; // Right margin/gutter space on edge of container | ||
37 | + this.flakeWidth = 8; // Max pixel width reserved for snow element | ||
38 | + this.flakeHeight = 8; // Max pixel height reserved for snow element | ||
39 | + this.vMaxX = 5; // Maximum X velocity range for snow | ||
40 | + this.vMaxY = 3; // Maximum Y velocity range for snow | ||
41 | + this.zIndex = 100; // CSS stacking order applied to each snowflake | ||
42 | + | ||
43 | + // --- End of user section --- | ||
44 | + | ||
45 | + var s = this, storm = this, i, | ||
46 | + // UA sniffing and backCompat rendering mode checks for fixed position, etc. | ||
47 | + isIE = navigator.userAgent.match(/msie/i), | ||
48 | + isIE6 = navigator.userAgent.match(/msie 6/i), | ||
49 | + isWin98 = navigator.appVersion.match(/windows 98/i), | ||
50 | + isMobile = navigator.userAgent.match(/mobile|opera m(ob|in)/i), | ||
51 | + isBackCompatIE = (isIE && document.compatMode === 'BackCompat'), | ||
52 | + noFixed = (isMobile || isBackCompatIE || isIE6), | ||
53 | + screenX = null, screenX2 = null, screenY = null, scrollY = null, vRndX = null, vRndY = null, | ||
54 | + windOffset = 1, | ||
55 | + windMultiplier = 2, | ||
56 | + flakeTypes = 6, | ||
57 | + fixedForEverything = false, | ||
58 | + opacitySupported = (function(){ | ||
59 | + try { | ||
60 | + document.createElement('div').style.opacity = '0.5'; | ||
61 | + } catch(e) { | ||
62 | + return false; | ||
63 | + } | ||
64 | + return true; | ||
65 | + }()), | ||
66 | + didInit = false, | ||
67 | + docFrag = document.createDocumentFragment(); | ||
68 | + | ||
69 | + this.timers = []; | ||
70 | + this.flakes = []; | ||
71 | + this.disabled = false; | ||
72 | + this.active = false; | ||
73 | + this.meltFrameCount = 20; | ||
74 | + this.meltFrames = []; | ||
75 | + | ||
76 | + this.events = (function() { | ||
77 | + | ||
78 | + var old = (!window.addEventListener && window.attachEvent), slice = Array.prototype.slice, | ||
79 | + evt = { | ||
80 | + add: (old?'attachEvent':'addEventListener'), | ||
81 | + remove: (old?'detachEvent':'removeEventListener') | ||
82 | + }; | ||
83 | + | ||
84 | + function getArgs(oArgs) { | ||
85 | + var args = slice.call(oArgs), len = args.length; | ||
86 | + if (old) { | ||
87 | + args[1] = 'on' + args[1]; // prefix | ||
88 | + if (len > 3) { | ||
89 | + args.pop(); // no capture | ||
90 | + } | ||
91 | + } else if (len === 3) { | ||
92 | + args.push(false); | ||
93 | + } | ||
94 | + return args; | ||
95 | + } | ||
96 | + | ||
97 | + function apply(args, sType) { | ||
98 | + var element = args.shift(), | ||
99 | + method = [evt[sType]]; | ||
100 | + if (old) { | ||
101 | + element[method](args[0], args[1]); | ||
102 | + } else { | ||
103 | + element[method].apply(element, args); | ||
104 | + } | ||
105 | + } | ||
106 | + | ||
107 | + function addEvent() { | ||
108 | + apply(getArgs(arguments), 'add'); | ||
109 | + } | ||
110 | + | ||
111 | + function removeEvent() { | ||
112 | + apply(getArgs(arguments), 'remove'); | ||
113 | + } | ||
114 | + | ||
115 | + return { | ||
116 | + add: addEvent, | ||
117 | + remove: removeEvent | ||
118 | + }; | ||
119 | + | ||
120 | + }()); | ||
121 | + | ||
122 | + function rnd(n,min) { | ||
123 | + if (isNaN(min)) { | ||
124 | + min = 0; | ||
125 | + } | ||
126 | + return (Math.random()*n)+min; | ||
127 | + } | ||
128 | + | ||
129 | + function plusMinus(n) { | ||
130 | + return (parseInt(rnd(2),10)===1?n*-1:n); | ||
131 | + } | ||
132 | + | ||
133 | + this.randomizeWind = function() { | ||
134 | + var i; | ||
135 | + vRndX = plusMinus(rnd(s.vMaxX,0.2)); | ||
136 | + vRndY = rnd(s.vMaxY,0.2); | ||
137 | + if (this.flakes) { | ||
138 | + for (i=0; i<this.flakes.length; i++) { | ||
139 | + if (this.flakes[i].active) { | ||
140 | + this.flakes[i].setVelocities(); | ||
141 | + } | ||
142 | + } | ||
143 | + } | ||
144 | + }; | ||
145 | + | ||
146 | + this.scrollHandler = function() { | ||
147 | + var i; | ||
148 | + // "attach" snowflakes to bottom of window if no absolute bottom value was given | ||
149 | + scrollY = (s.flakeBottom?0:parseInt(window.scrollY||document.documentElement.scrollTop||document.body.scrollTop,10)); | ||
150 | + if (isNaN(scrollY)) { | ||
151 | + scrollY = 0; // Netscape 6 scroll fix | ||
152 | + } | ||
153 | + if (!fixedForEverything && !s.flakeBottom && s.flakes) { | ||
154 | + for (i=s.flakes.length; i--;) { | ||
155 | + if (s.flakes[i].active === 0) { | ||
156 | + s.flakes[i].stick(); | ||
157 | + } | ||
158 | + } | ||
159 | + } | ||
160 | + }; | ||
161 | + | ||
162 | + this.resizeHandler = function() { | ||
163 | + if (window.innerWidth || window.innerHeight) { | ||
164 | + screenX = window.innerWidth-16-s.flakeRightOffset; | ||
165 | + screenY = (s.flakeBottom?s.flakeBottom:window.innerHeight); | ||
166 | + } else { | ||
167 | + screenX = (document.documentElement.clientWidth||document.body.clientWidth||document.body.scrollWidth)-(!isIE?8:0)-s.flakeRightOffset; | ||
168 | + screenY = s.flakeBottom?s.flakeBottom:(document.documentElement.clientHeight||document.body.clientHeight||document.body.scrollHeight); | ||
169 | + } | ||
170 | + screenX2 = parseInt(screenX/2,10); | ||
171 | + }; | ||
172 | + | ||
173 | + this.resizeHandlerAlt = function() { | ||
174 | + screenX = s.targetElement.offsetLeft+s.targetElement.offsetWidth-s.flakeRightOffset; | ||
175 | + screenY = s.flakeBottom?s.flakeBottom:s.targetElement.offsetTop+s.targetElement.offsetHeight; | ||
176 | + screenX2 = parseInt(screenX/2,10); | ||
177 | + }; | ||
178 | + | ||
179 | + this.freeze = function() { | ||
180 | + // pause animation | ||
181 | + var i; | ||
182 | + if (!s.disabled) { | ||
183 | + s.disabled = 1; | ||
184 | + } else { | ||
185 | + return false; | ||
186 | + } | ||
187 | + for (i=s.timers.length; i--;) { | ||
188 | + clearInterval(s.timers[i]); | ||
189 | + } | ||
190 | + }; | ||
191 | + | ||
192 | + this.resume = function() { | ||
193 | + if (s.disabled) { | ||
194 | + s.disabled = 0; | ||
195 | + } else { | ||
196 | + return false; | ||
197 | + } | ||
198 | + s.timerInit(); | ||
199 | + }; | ||
200 | + | ||
201 | + this.toggleSnow = function() { | ||
202 | + if (!s.flakes.length) { | ||
203 | + // first run | ||
204 | + s.start(); | ||
205 | + } else { | ||
206 | + s.active = !s.active; | ||
207 | + if (s.active) { | ||
208 | + s.show(); | ||
209 | + s.resume(); | ||
210 | + } else { | ||
211 | + s.stop(); | ||
212 | + s.freeze(); | ||
213 | + } | ||
214 | + } | ||
215 | + }; | ||
216 | + | ||
217 | + this.stop = function() { | ||
218 | + var i; | ||
219 | + this.freeze(); | ||
220 | + for (i=this.flakes.length; i--;) { | ||
221 | + this.flakes[i].o.style.display = 'none'; | ||
222 | + } | ||
223 | + s.events.remove(window,'scroll',s.scrollHandler); | ||
224 | + s.events.remove(window,'resize',s.resizeHandler); | ||
225 | + if (s.freezeOnBlur) { | ||
226 | + if (isIE) { | ||
227 | + s.events.remove(document,'focusout',s.freeze); | ||
228 | + s.events.remove(document,'focusin',s.resume); | ||
229 | + } else { | ||
230 | + s.events.remove(window,'blur',s.freeze); | ||
231 | + s.events.remove(window,'focus',s.resume); | ||
232 | + } | ||
233 | + } | ||
234 | + }; | ||
235 | + | ||
236 | + this.show = function() { | ||
237 | + var i; | ||
238 | + for (i=this.flakes.length; i--;) { | ||
239 | + this.flakes[i].o.style.display = 'block'; | ||
240 | + } | ||
241 | + }; | ||
242 | + | ||
243 | + this.SnowFlake = function(parent,type,x,y) { | ||
244 | + var s = this, storm = parent; | ||
245 | + this.type = type; | ||
246 | + this.x = x||parseInt(rnd(screenX-20),10); | ||
247 | + this.y = (!isNaN(y)?y:-rnd(screenY)-12); | ||
248 | + this.vX = null; | ||
249 | + this.vY = null; | ||
250 | + this.vAmpTypes = [1,1.2,1.4,1.6,1.8]; // "amplification" for vX/vY (based on flake size/type) | ||
251 | + this.vAmp = this.vAmpTypes[this.type]; | ||
252 | + this.melting = false; | ||
253 | + this.meltFrameCount = storm.meltFrameCount; | ||
254 | + this.meltFrames = storm.meltFrames; | ||
255 | + this.meltFrame = 0; | ||
256 | + this.twinkleFrame = 0; | ||
257 | + this.active = 1; | ||
258 | + this.fontSize = (10+(this.type/5)*10); | ||
259 | + this.o = document.createElement('div'); | ||
260 | + this.o.innerHTML = storm.snowCharacter; | ||
261 | + this.o.style.color = storm.snowColor; | ||
262 | + this.o.style.position = (fixedForEverything?'fixed':'absolute'); | ||
263 | + this.o.style.width = storm.flakeWidth+'px'; | ||
264 | + this.o.style.height = storm.flakeHeight+'px'; | ||
265 | + this.o.style.fontFamily = 'arial,verdana'; | ||
266 | + this.o.style.cursor = 'default'; | ||
267 | + this.o.style.overflow = 'hidden'; | ||
268 | + this.o.style.fontWeight = 'normal'; | ||
269 | + this.o.style.zIndex = storm.zIndex; | ||
270 | + docFrag.appendChild(this.o); | ||
271 | + | ||
272 | + this.refresh = function() { | ||
273 | + if (isNaN(s.x) || isNaN(s.y)) { | ||
274 | + // safety check | ||
275 | + return false; | ||
276 | + } | ||
277 | + s.o.style.left = s.x+'px'; | ||
278 | + s.o.style.top = s.y+'px'; | ||
279 | + }; | ||
280 | + | ||
281 | + this.stick = function() { | ||
282 | + if (noFixed || (storm.targetElement !== document.documentElement && storm.targetElement !== document.body)) { | ||
283 | + s.o.style.top = (screenY+scrollY-storm.flakeHeight)+'px'; | ||
284 | + } else if (storm.flakeBottom) { | ||
285 | + s.o.style.top = storm.flakeBottom+'px'; | ||
286 | + } else { | ||
287 | + s.o.style.display = 'none'; | ||
288 | + s.o.style.top = 'auto'; | ||
289 | + s.o.style.bottom = '0px'; | ||
290 | + s.o.style.position = 'fixed'; | ||
291 | + s.o.style.display = 'block'; | ||
292 | + } | ||
293 | + }; | ||
294 | + | ||
295 | + this.vCheck = function() { | ||
296 | + if (s.vX>=0 && s.vX<0.2) { | ||
297 | + s.vX = 0.2; | ||
298 | + } else if (s.vX<0 && s.vX>-0.2) { | ||
299 | + s.vX = -0.2; | ||
300 | + } | ||
301 | + if (s.vY>=0 && s.vY<0.2) { | ||
302 | + s.vY = 0.2; | ||
303 | + } | ||
304 | + }; | ||
305 | + | ||
306 | + this.move = function() { | ||
307 | + var vX = s.vX*windOffset, yDiff; | ||
308 | + s.x += vX; | ||
309 | + s.y += (s.vY*s.vAmp); | ||
310 | + if (s.x >= screenX || screenX-s.x < storm.flakeWidth) { // X-axis scroll check | ||
311 | + s.x = 0; | ||
312 | + } else if (vX < 0 && s.x-storm.flakeLeftOffset < -storm.flakeWidth) { | ||
313 | + s.x = screenX-storm.flakeWidth-1; // flakeWidth; | ||
314 | + } | ||
315 | + s.refresh(); | ||
316 | + yDiff = screenY+scrollY-s.y; | ||
317 | + if (yDiff<storm.flakeHeight) { | ||
318 | + s.active = 0; | ||
319 | + if (storm.snowStick) { | ||
320 | + s.stick(); | ||
321 | + } else { | ||
322 | + s.recycle(); | ||
323 | + } | ||
324 | + } else { | ||
325 | + if (storm.useMeltEffect && s.active && s.type < 3 && !s.melting && Math.random()>0.998) { | ||
326 | + // ~1/1000 chance of melting mid-air, with each frame | ||
327 | + s.melting = true; | ||
328 | + s.melt(); | ||
329 | + // only incrementally melt one frame | ||
330 | + // s.melting = false; | ||
331 | + } | ||
332 | + if (storm.useTwinkleEffect) { | ||
333 | + if (!s.twinkleFrame) { | ||
334 | + if (Math.random()>0.9) { | ||
335 | + s.twinkleFrame = parseInt(Math.random()*20,10); | ||
336 | + } | ||
337 | + } else { | ||
338 | + s.twinkleFrame--; | ||
339 | + s.o.style.visibility = (s.twinkleFrame && s.twinkleFrame%2===0?'hidden':'visible'); | ||
340 | + } | ||
341 | + } | ||
342 | + } | ||
343 | + }; | ||
344 | + | ||
345 | + this.animate = function() { | ||
346 | + // main animation loop | ||
347 | + // move, check status, die etc. | ||
348 | + s.move(); | ||
349 | + }; | ||
350 | + | ||
351 | + this.setVelocities = function() { | ||
352 | + s.vX = vRndX+rnd(storm.vMaxX*0.12,0.1); | ||
353 | + s.vY = vRndY+rnd(storm.vMaxY*0.12,0.1); | ||
354 | + }; | ||
355 | + | ||
356 | + this.setOpacity = function(o,opacity) { | ||
357 | + if (!opacitySupported) { | ||
358 | + return false; | ||
359 | + } | ||
360 | + o.style.opacity = opacity; | ||
361 | + }; | ||
362 | + | ||
363 | + this.melt = function() { | ||
364 | + if (!storm.useMeltEffect || !s.melting) { | ||
365 | + s.recycle(); | ||
366 | + } else { | ||
367 | + if (s.meltFrame < s.meltFrameCount) { | ||
368 | + s.setOpacity(s.o,s.meltFrames[s.meltFrame]); | ||
369 | + s.o.style.fontSize = s.fontSize-(s.fontSize*(s.meltFrame/s.meltFrameCount))+'px'; | ||
370 | + s.o.style.lineHeight = storm.flakeHeight+2+(storm.flakeHeight*0.75*(s.meltFrame/s.meltFrameCount))+'px'; | ||
371 | + s.meltFrame++; | ||
372 | + } else { | ||
373 | + s.recycle(); | ||
374 | + } | ||
375 | + } | ||
376 | + }; | ||
377 | + | ||
378 | + this.recycle = function() { | ||
379 | + s.o.style.display = 'none'; | ||
380 | + s.o.style.position = (fixedForEverything?'fixed':'absolute'); | ||
381 | + s.o.style.bottom = 'auto'; | ||
382 | + s.setVelocities(); | ||
383 | + s.vCheck(); | ||
384 | + s.meltFrame = 0; | ||
385 | + s.melting = false; | ||
386 | + s.setOpacity(s.o,1); | ||
387 | + s.o.style.padding = '0px'; | ||
388 | + s.o.style.margin = '0px'; | ||
389 | + s.o.style.fontSize = s.fontSize+'px'; | ||
390 | + s.o.style.lineHeight = (storm.flakeHeight+2)+'px'; | ||
391 | + s.o.style.textAlign = 'center'; | ||
392 | + s.o.style.verticalAlign = 'baseline'; | ||
393 | + s.x = parseInt(rnd(screenX-storm.flakeWidth-20),10); | ||
394 | + s.y = parseInt(rnd(screenY)*-1,10)-storm.flakeHeight; | ||
395 | + s.refresh(); | ||
396 | + s.o.style.display = 'block'; | ||
397 | + s.active = 1; | ||
398 | + }; | ||
399 | + | ||
400 | + this.recycle(); // set up x/y coords etc. | ||
401 | + this.refresh(); | ||
402 | + | ||
403 | + }; | ||
404 | + | ||
405 | + this.snow = function() { | ||
406 | + var active = 0, used = 0, waiting = 0, flake = null, i; | ||
407 | + for (i=s.flakes.length; i--;) { | ||
408 | + if (s.flakes[i].active === 1) { | ||
409 | + s.flakes[i].move(); | ||
410 | + active++; | ||
411 | + } else if (s.flakes[i].active === 0) { | ||
412 | + used++; | ||
413 | + } else { | ||
414 | + waiting++; | ||
415 | + } | ||
416 | + if (s.flakes[i].melting) { | ||
417 | + s.flakes[i].melt(); | ||
418 | + } | ||
419 | + } | ||
420 | + if (active<s.flakesMaxActive) { | ||
421 | + flake = s.flakes[parseInt(rnd(s.flakes.length),10)]; | ||
422 | + if (flake.active === 0) { | ||
423 | + flake.melting = true; | ||
424 | + } | ||
425 | + } | ||
426 | + }; | ||
427 | + | ||
428 | + this.mouseMove = function(e) { | ||
429 | + if (!s.followMouse) { | ||
430 | + return true; | ||
431 | + } | ||
432 | + var x = parseInt(e.clientX,10); | ||
433 | + if (x<screenX2) { | ||
434 | + windOffset = -windMultiplier+(x/screenX2*windMultiplier); | ||
435 | + } else { | ||
436 | + x -= screenX2; | ||
437 | + windOffset = (x/screenX2)*windMultiplier; | ||
438 | + } | ||
439 | + }; | ||
440 | + | ||
441 | + this.createSnow = function(limit,allowInactive) { | ||
442 | + var i; | ||
443 | + for (i=0; i<limit; i++) { | ||
444 | + s.flakes[s.flakes.length] = new s.SnowFlake(s,parseInt(rnd(flakeTypes),10)); | ||
445 | + if (allowInactive || i>s.flakesMaxActive) { | ||
446 | + s.flakes[s.flakes.length-1].active = -1; | ||
447 | + } | ||
448 | + } | ||
449 | + storm.targetElement.appendChild(docFrag); | ||
450 | + }; | ||
451 | + | ||
452 | + this.timerInit = function() { | ||
453 | + s.timers = (!isWin98?[setInterval(s.snow,s.animationInterval)]:[setInterval(s.snow,s.animationInterval*3),setInterval(s.snow,s.animationInterval)]); | ||
454 | + }; | ||
455 | + | ||
456 | + this.init = function() { | ||
457 | + var i; | ||
458 | + for (i=0; i<s.meltFrameCount; i++) { | ||
459 | + s.meltFrames.push(1-(i/s.meltFrameCount)); | ||
460 | + } | ||
461 | + s.randomizeWind(); | ||
462 | + s.createSnow(s.flakesMax); // create initial batch | ||
463 | + s.events.add(window,'resize',s.resizeHandler); | ||
464 | + s.events.add(window,'scroll',s.scrollHandler); | ||
465 | + if (s.freezeOnBlur) { | ||
466 | + if (isIE) { | ||
467 | + s.events.add(document,'focusout',s.freeze); | ||
468 | + s.events.add(document,'focusin',s.resume); | ||
469 | + } else { | ||
470 | + s.events.add(window,'blur',s.freeze); | ||
471 | + s.events.add(window,'focus',s.resume); | ||
472 | + } | ||
473 | + } | ||
474 | + s.resizeHandler(); | ||
475 | + s.scrollHandler(); | ||
476 | + if (s.followMouse) { | ||
477 | + s.events.add(isIE?document:window,'mousemove',s.mouseMove); | ||
478 | + } | ||
479 | + s.animationInterval = Math.max(20,s.animationInterval); | ||
480 | + s.timerInit(); | ||
481 | + }; | ||
482 | + | ||
483 | + this.start = function(bFromOnLoad) { | ||
484 | + if (!didInit) { | ||
485 | + didInit = true; | ||
486 | + } else if (bFromOnLoad) { | ||
487 | + // already loaded and running | ||
488 | + return true; | ||
489 | + } | ||
490 | + if (typeof s.targetElement === 'string') { | ||
491 | + var targetID = s.targetElement; | ||
492 | + s.targetElement = document.getElementById(targetID); | ||
493 | + if (!s.targetElement) { | ||
494 | + throw new Error('Snowstorm: Unable to get targetElement "'+targetID+'"'); | ||
495 | + } | ||
496 | + } | ||
497 | + if (!s.targetElement) { | ||
498 | + s.targetElement = (!isIE?(document.documentElement?document.documentElement:document.body):document.body); | ||
499 | + } | ||
500 | + if (s.targetElement !== document.documentElement && s.targetElement !== document.body) { | ||
501 | + s.resizeHandler = s.resizeHandlerAlt; // re-map handler to get element instead of screen dimensions | ||
502 | + } | ||
503 | + s.resizeHandler(); // get bounding box elements | ||
504 | + s.usePositionFixed = (s.usePositionFixed && !noFixed); // whether or not position:fixed is supported | ||
505 | + fixedForEverything = s.usePositionFixed; | ||
506 | + if (screenX && screenY && !s.disabled) { | ||
507 | + s.init(); | ||
508 | + s.active = true; | ||
509 | + } | ||
510 | + }; | ||
511 | + | ||
512 | + function doDelayedStart() { | ||
513 | + window.setTimeout(function() { | ||
514 | + s.start(true); | ||
515 | + }, 20); | ||
516 | + // event cleanup | ||
517 | + s.events.remove(isIE?document:window,'mousemove',doDelayedStart); | ||
518 | + } | ||
519 | + | ||
520 | + function doStart() { | ||
521 | + if (!s.excludeMobile || !isMobile) { | ||
522 | + if (s.freezeOnBlur) { | ||
523 | + s.events.add(isIE?document:window,'mousemove',doDelayedStart); | ||
524 | + } else { | ||
525 | + doDelayedStart(); | ||
526 | + } | ||
527 | + } | ||
528 | + // event cleanup | ||
529 | + s.events.remove(window, 'load', doStart); | ||
530 | + } | ||
531 | + | ||
532 | + // hooks for starting the snow | ||
533 | + if (s.autoStart) { | ||
534 | + s.events.add(window, 'load', doStart, false); | ||
535 | + } | ||
536 | + | ||
537 | + return this; | ||
538 | + | ||
539 | +}(window, document)); | ||
540 | + | ||
541 | + | ||
542 | + | ||
543 | + /* | ||
544 | + ==== ЗАПУСК ==== | ||
545 | + */ | ||
546 | + | ||
547 | + snowStorm.autoStart = true; | ||
548 | + snowStorm.snowColor = "#99ccff"; | ||
549 | + snowStorm.flakesMax = 200; | ||
550 | + snowStorm.flakesMaxActive = 200; | ||
551 | + snowStorm.animationInterval = 20; | ||
552 | + snowStorm.useTwinkleEffect = true; | ||
553 | + snowStorm.followMouse = true; | ||
554 | + |
templates/index.tpl