0


前端爱心代码跟个风

光棍节New一个对象发给Ta
(有编译器的用编译器,没有的可以用记事本)
在电脑桌面新建一个txt文本文档,复制下面的代码进去并保存,把文件名.txt的后缀改为.html,然后双击文件运行就可以看到效果了。
如果你的文件名没有后缀,需要打开扩展名:此电脑—>(左上方)查看—>文件扩展名,勾一下方框。这时你去看所有的文件类型都多了后缀名)

<!DOCTYPEhtml><html><head><title></title></head><style>*{padding: 0;margin: 0;}html,
  body{height: 100%;padding: 0;margin: 0;background:rgb(2, 2, 2);}canvas{position: absolute;width: 100%;height: 100%;}.aa{position: fixed;left: 50%;bottom: 10px;color:rgb(9, 194, 113)}</style><body><canvasid="pinkboard"></canvas><script>/*
     * Settings
     */var settings ={particles:{length:1000,// 最大颗粒量duration:3,// 粒子持续时间(秒)velocity:100,// 粒子速度(像素/秒)effect:-0.75,// 玩这个效果很好size:20,// 颗粒大小(像素)},};(function(){var b =0;var c =["ms","moz","webkit","o"];for(var a =0; a < c.length &&!window.requestAnimationFrame;++a){ window.requestAnimationFrame = window[c[a]+"RequestAnimationFrame"]; window.cancelAnimationFrame = window[c[a]+"CancelAnimationFrame"]|| window[c[a]+"CancelRequestAnimationFrame"]}if(!window.requestAnimationFrame){ window.requestAnimationFrame=function(h, e){var d =newDate().getTime();var f = Math.max(0,16-(d - b));var g = window.setTimeout(function(){h(d + f)}, f); b = d + f;return g }}if(!window.cancelAnimationFrame){ window.cancelAnimationFrame=function(d){clearTimeout(d)}}}());/*
     * Point class
     */var Point =(function(){functionPoint(x, y){this.x =(typeof x !=='undefined')? x :0;this.y =(typeof y !=='undefined')? y :0;}Point.prototype.clone=function(){returnnewPoint(this.x,this.y);};Point.prototype.length=function(length){if(typeof length =='undefined')return Math.sqrt(this.x *this.x +this.y *this.y);this.normalize();this.x *= length;this.y *= length;returnthis;};Point.prototype.normalize=function(){var length =this.length();this.x /= length;this.y /= length;returnthis;};return Point;})();/*
     * Particle class
     */var Particle =(function(){functionParticle(){this.position =newPoint();this.velocity =newPoint();this.acceleration =newPoint();this.age =0;}Particle.prototype.initialize=function(x, y, dx, dy){this.position.x = x;this.position.y = y;this.velocity.x = dx;this.velocity.y = dy;this.acceleration.x = dx * settings.particles.effect;this.acceleration.y = dy * settings.particles.effect;this.age =0;};Particle.prototype.update=function(deltaTime){this.position.x +=this.velocity.x * deltaTime;this.position.y +=this.velocity.y * deltaTime;this.velocity.x +=this.acceleration.x * deltaTime;this.velocity.y +=this.acceleration.y * deltaTime;this.age += deltaTime;};Particle.prototype.draw=function(context, image){functionease(t){return(--t)* t * t +1;}var size = image.width *ease(this.age / settings.particles.duration);
        context.globalAlpha =1-this.age / settings.particles.duration;
        context.drawImage(image,this.position.x - size /2,this.position.y - size /2, size, size);};return Particle;})();/*
     * ParticlePool class
     */var ParticlePool =(function(){var particles,
        firstActive =0,
        firstFree =0,
        duration = settings.particles.duration;functionParticlePool(length){// 创建和填充粒子池
        particles =newArray(length);for(var i =0; i < particles.length; i++)
          particles[i]=newParticle();}ParticlePool.prototype.add=function(x, y, dx, dy){
        particles[firstFree].initialize(x, y, dx, dy);//处理循环队列
        firstFree++;if(firstFree == particles.length) firstFree =0;if(firstActive == firstFree) firstActive++;if(firstActive == particles.length) firstActive =0;};ParticlePool.prototype.update=function(deltaTime){var i;// 处理循环队列if(firstActive < firstFree){for(i = firstActive; i < firstFree; i++)
            particles[i].update(deltaTime);}if(firstFree < firstActive){for(i = firstActive; i < particles.length; i++)
            particles[i].update(deltaTime);for(i =0; i < firstFree; i++)
            particles[i].update(deltaTime);}//移除非活性粒子while(particles[firstActive].age >= duration && firstActive != firstFree){
          firstActive++;if(firstActive == particles.length) firstActive =0;}};ParticlePool.prototype.draw=function(context, image){//绘制活性粒子if(firstActive < firstFree){for(i = firstActive; i < firstFree; i++)
            particles[i].draw(context, image);}if(firstFree < firstActive){for(i = firstActive; i < particles.length; i++)
            particles[i].draw(context, image);for(i =0; i < firstFree; i++)
            particles[i].draw(context, image);}};return ParticlePool;})();/*
     * 把所有这些放在一起
     */(function(canvas){var context = canvas.getContext('2d'),
        particles =newParticlePool(settings.particles.length),
        particleRate = settings.particles.length / settings.particles.duration,//粒子/秒
        time;// get point on heart with -PI <= t <= PIfunctionpointOnHeart(t){returnnewPoint(160* Math.pow(Math.sin(t),3),130* Math.cos(t)-50* Math.cos(2* t)-20* Math.cos(3* t)-10* Math.cos(4* t)+25);}//使用虚拟画布创建粒子图像var image =(function(){var canvas = document.createElement('canvas'),
          context = canvas.getContext('2d');
        canvas.width = settings.particles.size;
        canvas.height = settings.particles.size;//helper函数创建路径functionto(t){var point =pointOnHeart(t);
          point.x = settings.particles.size /2+ point.x * settings.particles.size /350;
          point.y = settings.particles.size /2- point.y * settings.particles.size /350;return point;}//创建路径
        context.beginPath();var t =-Math.PI;var point =to(t);
        context.moveTo(point.x, point.y);while(t < Math.PI){
          t +=0.01;// baby steps!
          point =to(t);
          context.lineTo(point.x, point.y);}
        context.closePath();//创建填充
        context.fillStyle ='#ff9999';
        context.fill();//创建图像var image =newImage();
        image.src = canvas.toDataURL();return image;})();//渲染那个东西!functionrender(){//下一动画帧requestAnimationFrame(render);//更新时间var newTime =newDate().getTime()/1000,
          deltaTime = newTime -(time || newTime);
        time = newTime;//透明帆布
        context.clearRect(0,0, canvas.width, canvas.height);//创建新粒子var amount = particleRate * deltaTime;for(var i =0; i < amount; i++){var pos =pointOnHeart(Math.PI-2* Math.PI* Math.random());var dir = pos.clone().length(settings.particles.velocity);
          particles.add(canvas.width /2+ pos.x, canvas.height /2- pos.y, dir.x,-dir.y);}//更新和绘制粒子
        particles.update(deltaTime);
        particles.draw(context, image);}//处理画布的大小functiononResize(){
        canvas.width = canvas.clientWidth;
        canvas.height = canvas.clientHeight;}
      window.onresize = onResize;//延迟渲染引导setTimeout(function(){onResize();render();},10);})(document.getElementById('pinkboard'));</script></body></html>

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_57780589/article/details/127810062
版权归原作者 佳美不ERROR 所有, 如有侵权,请联系我们删除。

“前端爱心代码跟个风”的评论:

还没有评论