@@ -38,7 +38,7 @@ export const trails = (
3838 /* v8 ignore next */
3939 gl . deleteShader ( shader ) ;
4040 /* v8 ignore next */
41- throw new Error ( ` Could not compile WebGL shader. \n\n" ${ info } ` ) ;
41+ throw new Error ( " Could not compile WebGL shader. \n\n" + info ) ; // skipcq: JS-0246
4242 /* v8 ignore next */
4343 }
4444 return shader ;
@@ -80,18 +80,13 @@ export const trails = (
8080 const positionBuffer = createBuffer ( ) ;
8181 const timeBuffer = createBuffer ( ) ;
8282
83+ let runningAnim = false ;
8384 let positions : number [ ] = [ ] ;
8485 let fades : number [ ] = [ ] ;
85- canvas . addEventListener ( "mousemove" , ( event : MouseEvent ) => {
86- const x = ( event . clientX / canvas . width ) * 2 - 1 ;
87- const y = ( event . clientY / canvas . height ) * - 2 + 1 ;
88-
89- positions . unshift ( x , y ) ;
90- fades . unshift ( 1 ) ;
91- } ) ;
9286
93- /** Start render loop */
87+ /** The render loop */
9488 const render = ( ) => {
89+ runningAnim = true ;
9590 fades = fades . map ( fade => fade / 1.1 ) ;
9691 positions = positions . filter ( ( _ , index ) => fades [ index ] > 0.001 ) ;
9792 fades = fades . filter ( fade => fade > 0.01 ) ;
@@ -107,8 +102,16 @@ export const trails = (
107102
108103 gl . drawArrays ( gl . LINE_STRIP , 0 , positions . length / 2 ) ;
109104
110- requestAnimationFrame ( render ) ;
105+ positions . length ? requestAnimationFrame ( render ) : ( runningAnim = false ) ;
111106 } ;
112107 gl . clearColor ( 0.0 , 0.0 , 0.0 , 0.0 ) ;
113- render ( ) ;
108+
109+ canvas . addEventListener ( "mousemove" , ( event : MouseEvent ) => {
110+ const x = ( event . clientX / canvas . width ) * 2 - 1 ;
111+ const y = ( event . clientY / canvas . height ) * - 2 + 1 ;
112+
113+ positions . unshift ( x , y ) ;
114+ fades . unshift ( 1 ) ;
115+ ! runningAnim && render ( ) ;
116+ } ) ;
114117} ;
0 commit comments