рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╕ рдкрд░ рдирдП рд╕рд╛рд▓ рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдордиреЛрд░рдВрдЬрди рд╕рд╛рдЗрдЯ рдХреЛ рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЦреИрд░, рд╕рд┐рд░реНрдл рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрдирд╡рд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдЕрдкрдиреА рдХрд╣рд╛рдиреА рдореЗрдВ, рдореИрдВ
рдЬрд┐рдпреЛрд░реНрдЬрд┐рдпреЛ рд╕рд░реНрджреЛ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ
рдореЗрдВ рдбреЗрд╡рд┐рдб рдлреНрд▓реИрдирдЧрди рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ, рдЖрдк рд╕реАрдзреЗ рдпрд╣рд╛рдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ Habr├й рдкрд░ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде, рдмрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрд╕реЛрд▓ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗред IE9 рдореЗрдВ, рдмрд╕ F12 рджрдмрд╛рдПрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ Internet Explorer 9 рдорд╛рдирдХ (Alt + 9) рдореЛрдб рдореЗрдВ рд░рдЦрдирд╛ рди рднреВрд▓реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Habr рдХреЛ IE8 рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреИрдирд╡рд╛рд╕ рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдБрдЪ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдФрд░ рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреА:
if ( document .createElement( 'canvas' ).getContext) {
...
}
else {
...
}
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд░реНрдл рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдПрдБ
рд╕реНрдиреЛрдлреНрд▓реЗрдХ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЗрдВ рдПрдХ рдХреИрдирд╡рд╛рд╕ (рдХреИрдирд╡рд╛рд╕) рдмрдирд╛рдПрдВрдЧреЗ:
var canvas = document .createElement( 'canvas' );
canvas.style.position = 'fixed' ;
canvas.style.top = '0px' ;
canvas.style.left = '0px' ;
canvas.style.zIndex = '-10' ;
canvas.width = document .body.offsetWidth;
canvas.height = window.innerHeight;
document .body.insertBefore(canvas, document .body.firstChild);
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рдХреИрдирд╡рд╕ рддрддреНрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдмрд╛рдХреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗред
рдЕрдЧрд▓рд╛ рд╣рдореЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдорд┐рд▓рддрд╛ рд╣реИ:
var sky = canvas.getContext( '2d' );
рдХреЛрдЪ рдмрд░реНрдл рдХрд╛ рдЯреБрдХрдбрд╝рд╛
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдмреНрд░рд╛рдпреБрдЬрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
рдХреЛрдЪ рд╕реНрдиреЛрдлреНрд▓реЗрдХ рдХреНрдпрд╛
рд╣реИ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЦреБрдж рдХреЛ рддрд╕реНрд╡реАрд░ рддрдХ рд╕реАрдорд┐рдд рдХрд░реВрдВрдЧрд╛:

рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рднрдЧреНрди рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред рддреНрд░рд┐рднреБрдЬ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рд╕рдорд╛рди рдбреНрд░рд╛рдЗрдВрдЧ рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рдЖрдЗрдП рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдкреНрд░рддрд┐рдкрд╛рджрди, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╣рдо
рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ (рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдФрд░ рд░реЛрдЯреЗрд╢рди) рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддрд┐рдкрд╛рджрди рдПрдХ рд╕реАрдзреА рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛ рдХреЗ рдЖрд░реЗрдЦрдг рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо рд▓рд╛рдЗрди рдбреНрд░реЙ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрджрд░реНрдн (рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡) рдХреЛ рд╕реНрдХреЗрд▓ рдФрд░ рдШреБрдорд╛рддреЗ рд╣реИрдВред
рд░реВрдкрд╛рдВрддрд░рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ () рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рдбрд┐рдЧреНрд░реА рдХреЛ рд░реЗрдбрд┐рдпрдВрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рд░реЗрдбрд┐рдпрдВрд╕ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ):
var deg = Math.PI / 180;
рдПрдХ рдХрд┐рдирд╛рд░реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
function leg(n, len) {
sky.save(); //
if (n == 0) { // -
sky.lineTo(len, 0); }
else {
sky.scale(1 / 3, 1 / 3); // 3
leg(n тАУ 1, len); sky.rotate(60 * deg);
leg(n тАУ 1, len); sky.rotate(-120 * deg);
leg(n тАУ 1, len); sky.rotate(60 * deg); leg(n тАУ 1, len); }
sky.restore(); //
sky.translate(len, 0); //
}
рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function drawFlake(x, y, len, n, stroke, fill) {
sky.save(); sky.strokeStyle = stroke;
sky.fillStyle = fill;
sky.beginPath();
sky.translate(x, y);
sky.moveTo(0, 0); leg(n, len); sky.closePath();
sky.fill();
sky.stroke();
sky.restore();
}
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдХрд╣реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рднрд░рдиреЗ рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо:

рдпрджрд┐ рд╣рдо рдЗрд╕реА рдШреБрдорд╛рд╡ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╣рд┐рдордкрд╛рдд рд╣реЛрддрд╛ рд╣реИ:
function drawFlake(x, y, len, n, stroke, fill) {
sky.save(); sky.strokeStyle = stroke;
sky.fillStyle = fill;
sky.beginPath();
sky.translate(x, y);
sky.moveTo(0, 0); leg(n, len); sky.rotate(-120 * deg);
leg(n, len); sky.rotate(-120 * deg);
leg(n, len); sky.closePath();
sky.fill();
sky.stroke();
sky.restore();
}
рдкрд░рд┐рдгрд╛рдо:

рдмрд░реНрдл рдХреЗ рдЯреБрдХрдбрд╝реЗ рдмрдирд╛рдирд╛ рдФрд░ рдмрдврд╝рдирд╛
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ: 1) рдЯрд╛рдЗрдорд░ рдкрд░ рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХреЗ рдЬреЛрдбрд╝ рдХреЛ рд▓рдЯрдХрд╛рдХрд░ рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХрд╛ рдПрдХ рдкреВрд▓ рдмрдирд╛рдПрдВ, 2) рдЯрд╛рдЗрдорд░ рджреНрд╡рд╛рд░рд╛, рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓реЗрдВ рдФрд░ рдбреНрд░рд╛ рдХрд░реЗрдВред
рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп, рд╕реНрдиреЛрдлреНрд▓реЗрдХ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ред рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
var rand = function (n) { return Math.floor(n * Math.random()); }
var flakes = []; var maxflakes = 20;
var snowspeed = 500;
var snowingTimer = setInterval(createSnowflake, snowspeed);
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рд╕рд╣реА рд╕рдордп рдкрд░, рдЯрд╛рдЗрдорд░ рдХреА рд╕рдлрд╛рдИ рд╕реЗ рдирдП рд╕реНрдиреЛрдлреНрд▓реЗрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ):
function createSnowflake() {
var order = 3;
var size = 10 + rand(50);
var x = rand( document .body.offsetWidth);
var y = window.pageYOffset;
flakes.push({ x: x, y: y, vx: 0, vy: 3 + rand(3), size: size, order: order, stroke: "#99f" , fill: "transparent" });
if (flakes.length > maxflakes) clearInterval(snowingTimer);
}
рдЪрд▓ рд░рд╣реЗ рд╣рд┐рдордХрдг
рдпрд╣рд╛рдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрд░рд┐рдПрдмрд▓ рдЕрдорд╛рдиреНрдпрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╕рдордп рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рд╣реЛрддреА рд╣реИред рд╣рдо рд╕реНрдерд┐рддрд┐ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдВрджреЛрд▓рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рд╕реНрдХреНрд░реАрди рд╕рд╛рдлрд╝ рдХрд░реЗрдВ, рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ -> рд╕реНрдиреЛрдлреНрд▓реЗрдХ рдбреНрд░рд╛ рдХрд░реЗрдВ)ред
var scrollspeed = 64;
setInterval(moveSnowflakes, scrollspeed);
function moveSnowflakes() {
sky.clearRect(0, 0, canvas.width, canvas.height);
var maxy = canvas.height;
for ( var i = 0; i < flakes.length; i++) {
var flake = flakes[i];
flake.y += flake.vy;
flake.x += flake.vx;
if (flake.y > maxy) flake.y = 0;
if (invalidateMeasure) {
flake.x = rand(canvas.width);
}
drawFlake(flake.x, flake.y, flake.size, flake.order, flake.stroke, flake.fill);
//
if (rand(4) == 1) flake.vx += (rand(11) - 5) / 10;
if (flake.vx > 2) flake.vx = 2;
if (flake.vx < -2) flake.vx = -2;
}
if (invalidateMeasure) invalidateMeasure = false ;
}
рдЕрдВрддрд┐рдо рдХреЛрдб
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШреБрдорд╛рд╡ рдФрд░ рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧ + рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╡рд░рдг:
( function () {
if ( document .createElement( 'canvas' ).getContext) {
if ( document .readyState === 'complete' )
snow();
else
window.addEventListener( 'DOMContentLoaded' , snow, false );
}
else {
return ;
}
var deg = Math.PI / 180;
var maxflakes = 20; var flakes = []; var scrollspeed = 64; var snowspeed = 500;
var canvas, sky;
var snowingTimer;
var invalidateMeasure = false ;
var strokes = [ "#6cf" , "#9cf" , "#99f" , "#ccf" , "#66f" , "#3cf" ];
function rand (n) {
return Math.floor(n * Math.random());
}
//
function snow() {
canvas = document .createElement( 'canvas' );
canvas.style.position = 'fixed' ;
canvas.style.top = '0px' ;
canvas.style.left = '0px' ;
canvas.style.zIndex = '-10' ;
document .body.insertBefore(canvas, document .body.firstChild);
sky = canvas.getContext( '2d' );
ResetCanvas();
snowingTimer = setInterval(createSnowflake, snowspeed);
setInterval(moveSnowflakes, scrollspeed);
window.addEventListener( 'resize' , ResetCanvas, false );
}
// Canvas
function ResetCanvas() {
invalidateMeasure = true ;
canvas.width = document .body.offsetWidth;
canvas.height = window.innerHeight;
}
//
function leg(n, len) {
sky.save(); //
if (n == 0) { // -
sky.lineTo(len, 0); }
else {
sky.scale(1 / 3, 1 / 3); // 3
leg(n - 1, len); sky.rotate(60 * deg);
leg(n - 1, len); sky.rotate(-120 * deg);
leg(n - 1, len); sky.rotate(60 * deg); leg(n - 1, len); }
sky.restore(); //
sky.translate(len, 0); //
}
//
function drawFlake(x, y, angle, len, n, stroke, fill) {
sky.save(); sky.strokeStyle = stroke;
sky.fillStyle = fill;
sky.beginPath();
sky.translate(x, y);
sky.moveTo(0, 0); sky.rotate(angle);
leg(n, len);
sky.rotate(-120 * deg);
leg(n, len); sky.rotate(-120 * deg);
leg(n, len); sky.closePath();
sky.fill();
sky.stroke();
sky.restore();
}
//
function createSnowflake() {
var order = 2+rand(2);
var size = 10*order+rand(10);
var x = rand( document .body.offsetWidth);
var y = window.pageYOffset;
var stroke = strokes[rand(strokes.length)];
flakes.push({ x: x, y: y, vx: 0, vy: 3 + rand(3), angle:0, size: size, order: order, stroke: stroke, fill: 'transparent' });
if (flakes.length > maxflakes) clearInterval(snowingTimer);
}
//
function moveSnowflakes() {
sky.clearRect(0, 0, canvas.width, canvas.height);
var maxy = canvas.height;
for ( var i = 0; i < flakes.length; i++) {
var flake = flakes[i];
flake.y += flake.vy;
flake.x += flake.vx;
if (flake.y > maxy) flake.y = 0;
if (invalidateMeasure) {
flake.x = rand(canvas.width);
}
drawFlake(flake.x, flake.y, flake.angle, flake.size, flake.order, flake.stroke, flake.fill);
//
if (rand(4) == 1) flake.vx += (rand(11) - 5) / 10;
if (flake.vx > 2) flake.vx = 2;
if (flake.vx < -2) flake.vx = -2;
if (rand(3) == 1) flake.angle = (rand(13) - 6) / 271;
}
if (invalidateMeasure) invalidateMeasure = false ;
}
} ());
* This source code was highlighted with Source Code Highlighter .
рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ, рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдмрд░реНрдлрдмрд╛рд░реА рдХрд░реЗрдВред