< html> < head> < metacharset = " UTF-8" > < title> </ title> < scriptsrc = " ./ParticleBackground.js" > </ script> </ head> < body> < canvasid = " canvas" > </ canvas> < script> const  particleBackgroundInstance =  new  ParticleBackground ( ) ; particleBackgroundInstance. initPoints ( ) ; particleBackgroundInstance. drawFrame ( ) ; </ script> </ body> </ html> 封装的js方法库ParticleBackground.js class  Point  { constructor ( canvas,  options )  { this . canvas =  canvas; this . ctx =  canvas. getContext ( "2d" ) ; options =  options ||  { } ; this . options =  { pointColor :  options. pointColor ||  "rgba(255,255,255,1)" , } ; this . x =  this . randomFloat ( 0 ,  this . canvas. width) ; this . y =  this . randomFloat ( 0 ,  this . canvas. height) ; var  speed =  this . randomFloat ( 0.3 ,  1.4 ) ; var  angle =  this . randomFloat ( 0 ,  2  *  Math. PI ) ; this . dx =  Math. sin ( angle)  *  speed; this . dy =  Math. cos ( angle)  *  speed; this . r =  1.2 ; this . color =  this . options. pointColor; } move ( )  { this . x +=  this . dx; if  ( this . x <  0 )  { this . x =  0 ; this . dx =  - this . dx; }  else  if  ( this . x >  this . canvas. width)  { this . x =  this . canvas. width; this . dx =  - this . dx; } this . y +=  this . dy; if  ( this . y <  0 )  { this . y =  0 ; this . dy =  - this . dy; }  else  if  ( this . y >  this . canvas. height)  { this . y =  this . canvas. height; this . dy =  - this . dy; } } draw ( )  { this . ctx. fillStyle =  this . color; this . ctx. beginPath ( ) ; this . ctx. arc ( this . x,  this . y,  this . r,  0 ,  Math. PI  *  2 ) ; this . ctx. closePath ( ) ; this . ctx. fill ( ) ; } randomInt ( min,  max )  { return  Math. floor ( ( max -  min +  1 )  *  Math. random ( )  +  min) ; } randomFloat ( min,  max )  { return  ( max -  min)  *  Math. random ( )  +  min; } 
} class  ParticleBackground  { constructor ( options )  { options =  options ||  { } ; this . canvas =  document. createElement ( "canvas" ) ; this . ctx =  this . canvas. getContext ( "2d" ) ; this . points =  [ ] ; this . degree =  2.5 ; this . startTime =  new  Date ( ) . getTime ( ) ; this . options =  { backgroundColor :  options. backgroundColor ||  "rgba(0, 43, 54,1)" , pointNum :  options. pointNum ||  150 , pointColor :  options. pointColor ||  "rgba(255,255,255,1)" , lineLength :  options. lineLength ||  10000 , } ; this . p0 =  new  Point ( this . canvas,  this . options) ; this . p0. dx =  this . p0. dy =  0 ; this . canvas. width =  window. innerWidth; this . canvas. height =  window. innerHeight; this . canvas. style. cssText =  ` position: fixed;top: 0px;left: 0px;z-index: -1;opacity: 1.0; ` ; document. body. appendChild ( this . canvas,  this . options) ; } initPoints ( num )  { if  ( ! num)  num =  this . options. pointNum; for  ( var  i =  0 ;  i <  num;  ++ i)  { this . points. push ( new  Point ( this . canvas) ) ; } this . initListner ( ) ; } drawLine ( p1,  p2,  deg )  { var  dx =  p1. x -  p2. x; var  dy =  p1. y -  p2. y; var  dis2 =  dx *  dx +  dy *  dy; if  ( dis2 <  2  *  this . options. lineLength)  { if  ( dis2 >  this . options. lineLength)  { if  ( p1 ===  this . p0)  { p2. x +=  dx *  0.03 ; p2. y +=  dy *  0.03 ; }  else  return ; } var  t =  ( 1.05  -  dis2 /  this . options. lineLength)  *  0.2  *  deg; this . ctx. strokeStyle =  "rgba(255,255,255,"  +  t +  ")" ; this . ctx. beginPath ( ) ; this . ctx. lineWidth =  1.5 ; this . ctx. moveTo ( p1. x,  p1. y) ; this . ctx. lineTo ( p2. x,  p2. y) ; this . ctx. closePath ( ) ; this . ctx. stroke ( ) ; } return ; } drawFrame ( )  { this . canvas. width =  window. innerWidth; this . canvas. height =  window. innerHeight; this . ctx. fillStyle =  this . options. backgroundColor; this . ctx. fillRect ( 0 ,  0 ,  this . canvas. width,  this . canvas. height) ; var  arr =  this . p0. x ==  null  ?  this . points :  [ this . p0] . concat ( this . points) ; for  ( var  i =  0 ;  i <  arr. length;  ++ i)  { for  ( var  j =  i +  1 ;  j <  arr. length;  ++ j)  { this . drawLine ( arr[ i] ,  arr[ j] ,  1.0 ) ; } arr[ i] . draw ( ) ; arr[ i] . move ( ) ; } window. requestAnimationFrame ( this . drawFrame . bind ( this ) ) ; } initListner ( )  { const  _this =  this ; document. onmousemove  =  function  ( ev )  { _this. p0. x =  ev. clientX; _this. p0. y =  ev. clientY; } ; document. onmousedown  =  function  ( ev )  { _this. degree =  5.0 ; _this. p0. x =  ev. clientX; _this. p0. y =  ev. clientY; } ; document. onmouseup  =  function  ( ev )  { _this. degree =  2.5 ; _this. p0. x =  ev. clientX; _this. p0. y =  ev. clientY; } ; window. onmouseout  =  function  ( )  { _this. p0. x =  null ; _this. p0. y =  null ; } ; } 
}