0


html--瀑布效果

<!doctypehtml><html><head><metacharset="utf-8"><title>瀑布效果</title><style>body{background: #222;color: white;overflow:hidden;}#container{box-shadow: inset 0 1px 0 #444, 0 -1px 0 #000;height: 100vh;width: 100vw;position: absolute;left: 0;top: 0;margin: 0;will-change: transform;-webkit-transform:translateZ(0);transform:translateZ(0);}canvas#waterfall{display: block;margin: 0 auto;width: 30%;height: 55%;will-change: transform;-webkit-transform:translateZ(0);transform:translateZ(0);}.emma{height: 100vh;width: 100%;position: absolute;left: 0;top: 0;margin: 0;}h1{color: #0af;font-size: 30vw;}canvas#surface{-webkit-animation: fade-in 3000ms forwards;animation: fade-in 3000ms forwards;display: block;left: 0;position: absolute;top: 0;z-index: -1;}@-webkit-keyframes fade-in{0%{opacity: 0;}100%{opacity: 1;}}@keyframes fade-in{0%{opacity: 0;}100%{opacity: 1;}}</style></head><body><divid="container"><canvasid="waterfall"></canvas><divclass="emma flex"><div></div></div></div><scripttype="text/javascript"src="js/pixi.min.js"></script><scripttype="text/javascript"src="js/tinycolor.min.js"></script><scripttype="text/javascript">+!~-(function(PIXI, window, document,undefined){varwaterfallCanvas=function(c, cw, ch){var _this =this;this.c = c;this.ctx = c.getContext('2d');this.cw = cw;this.ch = ch;this.particles =[];this.particleRate =6;this.gravity =0.15;this.init=function(){this.loop();};this.reset=function(){this.ctx.clearRect(0,0,this.cw,this.ch);this.particles =[];};this.rand=function(rMi, rMa){return~~((Math.random()*(rMa - rMi +1))+ rMi);};this.Particle=function(){var newWidth = _this.rand(1,20);var newHeight = _this.rand(1,45);this.x = _this.rand(10+(newWidth /2), _this.cw -10-(newWidth /2));this.y =-newHeight;this.vx =0;this.vy =0;this.width = newWidth;this.height = newHeight;this.hue = _this.rand(200,220);this.saturation = _this.rand(30,60);this.lightness = _this.rand(30,60);};this.Particle.prototype.update=function(i){this.vx +=this.vx;this.vy += _this.gravity;this.x +=this.vx;this.y +=this.vy;};this.Particle.prototype.render=function(){
      _this.ctx.strokeStyle ='hsla('+this.hue +', '+this.saturation +'%, '+this.lightness +'%, .05)';
      _this.ctx.beginPath();
      _this.ctx.moveTo(this.x,this.y);
      _this.ctx.lineTo(this.x,this.y +this.height);
      _this.ctx.lineWidth =this.width /2;
      _this.ctx.lineCap ='round';
      _this.ctx.stroke();};this.Particle.prototype.renderBubble=function(){
      _this.ctx.fillStyle ='hsla('+this.hue +', 40%, 40%, 1)';
      _this.ctx.fillStyle ='hsla('+this.hue +', '+this.saturation +'%, '+this.lightness +'%, .3)';
      _this.ctx.beginPath();
      _this.ctx.arc(this.x +this.width /2, _this.ch -20- _this.rand(0,10), _this.rand(1,8),0, Math.PI*2,false);
      _this.ctx.fill();};this.createParticles=function(){var i =this.particleRate;while(i--){this.particles.push(newthis.Particle());}};this.removeParticles=function(){var i =this.particleRate;while(i--){var p =this.particles[i];if(p.y > _this.ch -20- p.height){
          p.renderBubble();
          _this.particles.splice(i,1);}}};this.updateParticles=function(){var i =this.particles.length;while(i--){var p =this.particles[i];
        p.update(i);}};this.renderParticles=function(){var i =this.particles.length;while(i--){var p =this.particles[i];
        p.render();}};this.clearCanvas=function(){this.ctx.globalCompositeOperation ='destination-out';this.ctx.fillStyle ='rgba(255,255,255,.06)';this.ctx.fillRect(0,0,this.cw,this.ch);this.ctx.globalCompositeOperation ='lighter';};this.loop=function(){varloopIt=function(){requestAnimationFrame(loopIt, _this.c);
        _this.clearCanvas();
        _this.createParticles();
        _this.updateParticles();
        _this.renderParticles();
        _this.removeParticles();};loopIt();};};varisCanvasSupported=function(){var elem = document.createElement('canvas');return!!(elem.getContext && elem.getContext('2d'));};varsetupRAF=function(){var lastTime =0;var vendors =['ms','moz','webkit','o'];for(var x =0; x < vendors.length &&!window.requestAnimationFrame;++x){
      window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
      window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']|| window[vendors[x]+'CancelRequestAnimationFrame'];}if(!window.requestAnimationFrame){
      window.requestAnimationFrame=function(callback, element){var currTime =newDate().getTime();var timeToCall = Math.max(0,16-(currTime - lastTime));var id = window.setTimeout(function(){callback(currTime + timeToCall);}, timeToCall);
        lastTime = currTime + timeToCall;return id;};}if(!window.cancelAnimationFrame){
      window.cancelAnimationFrame=function(id){clearTimeout(id);};}};if(isCanvasSupported()){var c = document.getElementById('waterfall');var cw = c.width = Math.max(document.getElementById('waterfall').scrollWidth, document.getElementById('waterfall').offsetWidth, document.getElementById('waterfall').clientWidth, document.getElementById('waterfall').scrollWidth, document.getElementById('waterfall').offsetWidth);var ch = c.height = Math.max(document.getElementById('waterfall').scrollHeight, document.getElementById('waterfall').offsetHeight, document.getElementById('waterfall').clientHeight, document.getElementById('waterfall').scrollHeight, document.getElementById('waterfall').offsetHeight);var waterfall =newwaterfallCanvas(c, cw, ch);setupRAF();
    waterfall.init();}/* Second plugin */var w, h, renderer, stage, waveGraphics, partGraphics, waveTexture, partTexture, waveCount, partCount, waves, parts;functioninit(){
    renderer =PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight /2,{backgroundColor:'0x'+tinycolor('hsl(200, 50%, 10%)').toHex()});
    stage =newPIXI.Container();
    waveCount =2000;
    partCount =1000;
    waves =[];
    parts =[];
    document.body.appendChild(renderer.view);reset();for(var i =0; i <300; i++){step();}loop();}functionreset(){
    w = window.innerWidth;
    h = window.innerHeight;
    renderer.resize(w, h);
    waveGraphics =null;
    waveTexture =null;
    partGraphics =null;
    partTexture =null;
    waveGraphics =newPIXI.Graphics();
    waveGraphics.cacheAsBitmap =true;
    waveGraphics.beginFill('0x'+tinycolor('hsl(200, 74%, 40%)').toHex(),0.15);
    waveGraphics.drawCircle(0,0,20);
    waveGraphics.endFill();
    waveTexture = waveGraphics.generateTexture();
    partGraphics =newPIXI.Graphics();
    partGraphics.cacheAsBitmap =true;
    partGraphics.beginFill('0x'+tinycolor('hsl(200, 70%, 40%)').toHex(),0.2);
    partGraphics.drawCircle(0,0,15);
    partGraphics.endFill();
    partTexture = partGraphics.generateTexture();}functionstep(){if(waves.length < waveCount){for(var i =0; i <10; i++){var wave =newPIXI.Sprite(waveTexture),
          scale =0.2+ Math.random()*0.8;
        wave.position.x = w /2;
        wave.position.y = h /2;
        wave.anchor.x =0.5;
        wave.anchor.y =0.5;
        wave.scale.x = scale *10;
        wave.scale.y = scale *0.5;
        wave.blendMode =PIXI.BLEND_MODES.SCREEN;
        waves.push({sprite: wave,x: wave.position.x,y: wave.position.y,vx:0,vy:0,angle: Math.PI/2+ Math.random()* Math.PI+ Math.PI*1.5,speed:0.01+ Math.random()/10});
        stage.addChild(wave);}}for(var i =0, length = waves.length; i < length; i++){var wave = waves[i];
      wave.sprite.position.x = wave.x;
      wave.sprite.position.y = wave.y;
      wave.vx = Math.cos(wave.angle)* wave.speed;
      wave.vy = Math.sin(wave.angle)* wave.speed;
      wave.x += wave.vx;
      wave.y += wave.vy;
      wave.speed *=1.01;if(wave.x > w +200|| wave.x <-200|| wave.y > h +200){
        wave.x = w /2;
        wave.y = h /2;
        wave.speed =0.01+ Math.random()/10;}}if(parts.length < partCount){var part =newPIXI.Sprite(partTexture),
        scale =0.2+ Math.random()*0.8,
        type = Math.random()>0.5?1:0;
      part.position.x = w /2+ Math.random()*380-190;
      part.position.y = h /2+0;
      part.anchor.x =0.5;
      part.anchor.y =0.5;
      part.scale.x = type ? scale : scale *0.5;
      part.scale.y = type ? scale : scale *15;
      part.blendMode =PIXI.BLEND_MODES.SCREEN;
      parts.push({sprite: part,ox: part.position.x,oy: part.position.y,x: part.position.x,y: part.position.y,vx:0,vy:0,angle:(-Math.PI*0.5)+(w /2- part.position.x)/750,speed:0.0001+ Math.random()/50});
      stage.addChild(part);}for(var i =0, length = parts.length; i < length; i++){var part = parts[i];
      part.sprite.position.x = part.x;
      part.sprite.position.y = part.y;
      part.vx = Math.cos(part.angle)* part.speed;
      part.vy = Math.sin(part.angle)* part.speed;
      part.x += part.vx;
      part.y += part.vy;
      part.speed *=1.01;if(part.x > w +50|| part.x <-50|| part.y <-50){
        part.x = part.ox;
        part.y = part.oy;
        part.speed =0.01+ Math.random()/50;}}
    renderer.render(stage);}functionloop(){step();requestAnimationFrame(loop);}
  window.addEventListener('resize', reset);init();})(PIXI,this, document);</script></body></html>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

由于js文件过多,整个文件已放下载区,欢迎下载,free
在这里插入图片描述

标签: html javascript 前端

本文转载自: https://blog.csdn.net/stqer/article/details/138555623
版权归原作者 fo安方 所有, 如有侵权,请联系我们删除。

“html--瀑布效果”的评论:

还没有评论