рдХреИрдирд╡рд╕ рдкрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдзреБрдЖрдБред

рдкрд░рд┐рдЪрдп


рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдзреБрдПрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд "рднрд╛рд░реА" рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦрд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдбред

рддреЛ рдкреЗрдЬ рд▓реЗрдЖрдЙрдЯ:


<html> <head> <title>smoke</title> <meta charset="utf-8"/> </head> <body bgcolor = "#000"> <div id = "info" style = "color: #fff"></div> <canvas id = "canvas" width = "500px" height = "500px"></canvas> <script> ... </script> </body> </html> 

рдЗрд╕рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдПрдХ рдХреИрдирд╡рд╛рд╕ рд╣реИ, рдХрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП div, рдФрд░ рдПрдХ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рд░реАрд░ - рдПрдХ рд╕рдлреЗрдж рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░, рдкреНрд░рднрд╛рд╡ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреБрдХрдбрд╝рд╛ рджреНрд╡рд╛рд░рд╛:


рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВред
 info = document.getElementById('info'); canvas = document.getElementById('canvas'); ctx = canvas.getContext('2d'); function random(min,max){ return Math.random() * (max - min) + min; } 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп (рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдореЗрд░рд╛ рд╣рд╛рде рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╣реИ =)ред рджрд░рдЕрд╕рд▓, рдХрдгреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ (рдЯреЛрдЯреЛрд▓реЙрдЬреА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)ред
рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдПрдХ рд╡рд╕реНрддреБ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдпрд╣ рд╡рд╕реНрддреБ рдХрдгреЛрдВ рдХреЗ рд╕рд░рдгреА рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИред
 function addParticle(){ particles.push({ num: particles.length, // op: random(0,0.5), // dop: random(0.002,0.008), //   r: random(3,10), // dr: random(0.5,1.5), //   a: random(0,180), // da: random(-3,3), //   x: random(249,251), //- dx: random(-0.2,0.2), //    y: random(349,351), //- dy: random(0.5,1), //    draw: /*       */ }); } 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдпрд╣ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдХрдг рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдирдП рдорд╛рдкрджрдВрдбреЛрдВ (рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рддреНрд░рд┐рдЬреНрдпрд╛, рдЖрджрд┐) рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреИрдирд╡рд╛рд╕ рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ (ctx.globalAlpha = ...)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХрд┐рддрдирд╛ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╕рдордп рдлреНрд░реЗрдо рд╕рдордп рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛, рддрджрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдХрдг рдПрдХ рдмрдбрд╝реЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рди рд░рд╣реЗрдВред рдпрд╣реА рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдлреНрд░реЗрдо рд╕реНрдХрд┐рдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИред рдЦреИрд░, рдкреНрд░рддрд┐рдкрд╛рджрди рдЦреБрдж, рдЬрд┐рд╕рдореЗрдВ рдХрдг (ctx.translate) рдХреЗ рд╕рд╣реА рд░реЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕реАрдзреЗ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (ctx.rotate (рд░реЗрдбрд┐рдпрди рдореЗрдВ рдХреЛрдг)) рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдШреБрдорд╛рддреЗ рд╣реБрдП, рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди (ctx.drawImage)ред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЪрд┐рддреНрд░ рдХреЛ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ "рд╢реВрдиреНрдп рд╕реЗ рдЖрдзреЗ рддреНрд░рд┐рдЬреНрдпрд╛" рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдЧреНрд░реА рдХреЛ рд░реЗрдбрд┐рдпрди (рдХреЛрдг * рдЧрдгрд┐рдд.рдкреБ. / 180) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рднреА рдордд рднреВрд▓рдирд╛ред
 draw: function(timer){ this.op -= this.dop; //   if(this.op > 0){ //   0,       ,     ? this.r += this.dr; //  this.a -= this.da; //  ( !) this.x -= this.dx; // - this.y -= this.dy; // - ctx.globalAlpha = this.op; //   if(window.performance.now() - time < 28){ //    "",      ,      ctx.save(); //   ctx.translate(this.x,this.y); //   ctx.rotate(this.a*Math.PI/180); //  ctx.drawImage(img,-this.r/2,-this.r/2,this.r,this.r); //  ctx.restore(); //    } } } 

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдСрдл рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рднреА рдХрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдХрд╛рд░реНрдп рд╣реИред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХреЙрд▓ рд╕рдордп (window.performance.now ()) рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдХрдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪрдХреНрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдХреЗ рд▓рд┐рдП "рд░рди" рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдХрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд░рдгреА рддрддреНрд╡ (рдХрдг) рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдпрджрд┐ рдХрдг рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдРрд╕реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ (рд╢реВрдиреНрдп рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛, рдХреИрдирд╡рд╛рд╕ рд╕реЗ рдкрд░реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред рдлрд╝рдВрдХреНрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ рдФрд░ рд╕рднреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЦреБрдж рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдСрдирд▓рд╛рдЗрди рдЧреЗрдо (рдпрд╣ рд▓рдЧрднрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рдзреБрдПрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ requestAnimationFrame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЬрдм рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ (рд╕рднреА рдХрд╛рд░реНрдб рд╣реИрдВ) рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЧреЗрдо рдирд╣реАрдВ рдЦреЛрд▓рд╛ рд╣реИ =)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб:
 function draw(){ time = window.performance.now(); //   addParticle(); //  info.innerHTML = particles.length; //  div   canvas.width = canvas.width; //  for(var i = 0; i < particles.length; i++){ //   ,      if(particles[i].op <= 0 || particles[i].x < -100 || particles[i].x > 600 || particles[i].y < -100){ particles[i].op = 0; particles[i] = null; delete particles[i]; particles.splice(i,1); } particles[i].draw(); //    .       else,         ,      "" } setTimeout(draw, 30); //... } 

рдпрд╣рд╛рдБ рдХреЛрдб рдХреА рд╡рд░реНрддрдиреА рд╣реИ рдФрд░ рдпрд╣ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЪрд┐рддреНрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ "рдХрдг рдкрде" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрд╣рд╛рдБ рддрд╕реНрд╡реАрд░ рд╣реИ:
рдЫрд╡рд┐
рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
 img = new Image(); img.src = 'smoke.png'; img.onload = draw(); 

рд▓рд╛рдЗрд╡ рд▓рд┐рдВрдХ - рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП window.performance.now () рдХреЛ Date.now () рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдм рдмрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреАрдПрд╕ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ - рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд▓рд┐рдЦреЛред
рд╕реНрд░реЛрдд - F12
рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░реНрдпрд╛рдкреНрдд рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рдирд╛ рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рд░ рдкрдВрдХреНрддрд┐ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд╣реА рд╣реИред рдлрд┐рд░ рдорд┐рд▓рддреЗ рд╣реИрдВ!


Source: https://habr.com/ru/post/In185482/


All Articles