@@ -38,7 +38,7 @@ export const trails = (
38
38
/* v8 ignore next */
39
39
gl . deleteShader ( shader ) ;
40
40
/* 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
42
42
/* v8 ignore next */
43
43
}
44
44
return shader ;
@@ -80,18 +80,13 @@ export const trails = (
80
80
const positionBuffer = createBuffer ( ) ;
81
81
const timeBuffer = createBuffer ( ) ;
82
82
83
+ let runningAnim = false ;
83
84
let positions : number [ ] = [ ] ;
84
85
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
- } ) ;
92
86
93
- /** Start render loop */
87
+ /** The render loop */
94
88
const render = ( ) => {
89
+ runningAnim = true ;
95
90
fades = fades . map ( fade => fade / 1.1 ) ;
96
91
positions = positions . filter ( ( _ , index ) => fades [ index ] > 0.001 ) ;
97
92
fades = fades . filter ( fade => fade > 0.01 ) ;
@@ -107,8 +102,16 @@ export const trails = (
107
102
108
103
gl . drawArrays ( gl . LINE_STRIP , 0 , positions . length / 2 ) ;
109
104
110
- requestAnimationFrame ( render ) ;
105
+ positions . length ? requestAnimationFrame ( render ) : ( runningAnim = false ) ;
111
106
} ;
112
107
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
+ } ) ;
114
117
} ;
0 commit comments