实现代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
< HTML> < HEAD> < TITLE> New Document </ TITLE> < META NAME = " Generator" CONTENT = " EditPlus" > < META NAME = " Author" CONTENT = " " > < META NAME = " Keywords" CONTENT = " " > < META NAME = " Description" CONTENT = " " > < style> body { overflow : hidden; background : black;
} </ style> </ HEAD> < BODY>
< canvas id = " canvas-club" > </ canvas> < script> var c = document. getElementById ( "canvas-club" ) ;
var ctx = c. getContext ( "2d" ) ;
var w = c. width = window. innerWidth;
var h = c. height = window. innerHeight;
var clearColor = 'rgba(0, 0, 0, .1)' ;
var max = 30 ;
var drops = [ ] ; function random ( min, max) { return Math. random ( ) * ( max - min) + min;
} function O ( ) { } O . prototype = { init: function ( ) { this . x = random ( 0 , w) ; this . y = 0 ; this . color = 'hsl(180, 100%, 50%)' ; this . w = 2 ; this . h = 1 ; this . vy = random ( 4 , 5 ) ; this . vw = 3 ; this . vh = 1 ; this . size = 2 ; this . hit = random ( h * .8 , h * .9 ) ; this . a = 1 ; this . va = .96 ; } , draw: function ( ) { if ( this . y > this . hit) { ctx. beginPath ( ) ; ctx. moveTo ( this . x, this . y - this . h / 2 ) ; ctx. bezierCurveTo ( this . x + this . w / 2 , this . y - this . h / 2 , this . x + this . w / 2 , this . y + this . h / 2 , this . x, this . y + this . h / 2 ) ; ctx. bezierCurveTo ( this . x - this . w / 2 , this . y + this . h / 2 , this . x - this . w / 2 , this . y - this . h / 2 , this . x, this . y - this . h / 2 ) ; ctx. strokeStyle = 'hsla(180, 100%, 50%, ' + this . a+ ')' ; ctx. stroke ( ) ; ctx. closePath ( ) ; } else { ctx. fillStyle = this . color; ctx. fillRect ( this . x, this . y, this . size, this . size * 5 ) ; } this . update ( ) ; } , update: function ( ) { if ( this . y < this . hit) { this . y += this . vy; } else { if ( this . a > .03 ) { this . w += this . vw; this . h += this . vh; if ( this . w > 100 ) { this . a *= this . va; this . vw *= .98 ; this . vh *= .98 ; } } else { this . init ( ) ; } } }
} function resize ( ) { w = c. width = window. innerWidth; h = c. height = window. innerHeight;
} function setup ( ) { for ( var i = 0 ; i < max; i++ ) { ( function ( j) { setTimeout ( function ( ) { var o = new O ( ) ; o. init ( ) ; drops. push ( o) ; } , j * 200 ) } ( i) ) ; }
} function anim ( ) { ctx. fillStyle = clearColor; ctx. fillRect ( 0 , 0 , w, h) ; for ( var i in drops) { drops[ i] . draw ( ) ; } requestAnimationFrame ( anim) ;
} window. addEventListener ( "resize" , resize) ; setup ( ) ;
anim ( ) ; </ script> </ BODY>
</ HTML>
实现结果: