@@ -166,32 +166,57 @@ var SubtitlesOctopus = function (options) {
166166 }
167167 } ;
168168
169+ function onTimeUpdate ( ) {
170+ self . setCurrentTime ( self . video . currentTime + self . timeOffset ) ;
171+ } ;
172+
173+ function onPlaying ( ) {
174+ self . setIsPaused ( false , self . video . currentTime + self . timeOffset ) ;
175+ }
176+
177+ function onPause ( ) {
178+ self . setIsPaused ( true , self . video . currentTime + self . timeOffset ) ;
179+ }
180+
181+ function onSeeking ( ) {
182+ self . video . removeEventListener ( 'timeupdate' , onTimeUpdate , false ) ;
183+ }
184+
185+ function onSeeked ( ) {
186+ self . video . addEventListener ( 'timeupdate' , onTimeUpdate , false ) ;
187+
188+ var currentTime = self . video . currentTime + self . timeOffset ;
189+
190+ self . setCurrentTime ( currentTime ) ;
191+
192+ if ( self . renderAhead > 0 ) {
193+ _cleanPastRendered ( currentTime , true ) ;
194+ }
195+ }
196+
197+ function onRateChange ( ) {
198+ self . setRate ( self . video . playbackRate ) ;
199+ }
200+
201+ function onWaiting ( ) {
202+ self . setIsPaused ( true , self . video . currentTime + self . timeOffset ) ;
203+ }
204+
205+ function onLoadedMetadata ( e ) {
206+ e . target . removeEventListener ( e . type , onLoadedMetadata , false ) ;
207+ self . resize ( ) ;
208+ }
209+
169210 self . setVideo = function ( video ) {
170211 self . video = video ;
171212 if ( self . video ) {
172- var timeupdate = function ( ) {
173- self . setCurrentTime ( video . currentTime + self . timeOffset ) ;
174- }
175- self . video . addEventListener ( "timeupdate" , timeupdate , false ) ;
176- self . video . addEventListener ( "playing" , function ( ) {
177- self . setIsPaused ( false , video . currentTime + self . timeOffset ) ;
178- } , false ) ;
179- self . video . addEventListener ( "pause" , function ( ) {
180- self . setIsPaused ( true , video . currentTime + self . timeOffset ) ;
181- } , false ) ;
182- self . video . addEventListener ( "seeking" , function ( ) {
183- self . video . removeEventListener ( "timeupdate" , timeupdate ) ;
184- } , false ) ;
185- self . video . addEventListener ( "seeked" , function ( ) {
186- self . video . addEventListener ( "timeupdate" , timeupdate , false ) ;
187- self . setCurrentTime ( video . currentTime + self . timeOffset ) ;
188- } , false ) ;
189- self . video . addEventListener ( "ratechange" , function ( ) {
190- self . setRate ( video . playbackRate ) ;
191- } , false ) ;
192- self . video . addEventListener ( "waiting" , function ( ) {
193- self . setIsPaused ( true , video . currentTime + self . timeOffset ) ;
194- } , false ) ;
213+ self . video . addEventListener ( 'timeupdate' , onTimeUpdate , false ) ;
214+ self . video . addEventListener ( 'playing' , onPlaying , false ) ;
215+ self . video . addEventListener ( 'pause' , onPause , false ) ;
216+ self . video . addEventListener ( 'seeking' , onSeeking , false ) ;
217+ self . video . addEventListener ( 'seeked' , onSeeked , false ) ;
218+ self . video . addEventListener ( 'ratechange' , onRateChange , false ) ;
219+ self . video . addEventListener ( 'waiting' , onWaiting , false ) ;
195220
196221 document . addEventListener ( "fullscreenchange" , self . resizeWithTimeout , false ) ;
197222 document . addEventListener ( "mozfullscreenchange" , self . resizeWithTimeout , false ) ;
@@ -209,10 +234,7 @@ var SubtitlesOctopus = function (options) {
209234 self . resize ( ) ;
210235 }
211236 else {
212- self . video . addEventListener ( "loadedmetadata" , function listener ( e ) {
213- e . target . removeEventListener ( e . type , listener ) ;
214- self . resize ( ) ;
215- } , false ) ;
237+ self . video . addEventListener ( 'loadedmetadata' , onLoadedMetadata , false ) ;
216238 }
217239 }
218240 } ;
@@ -549,11 +571,41 @@ var SubtitlesOctopus = function (options) {
549571 } ) ;
550572
551573 self . worker . terminate ( ) ;
574+ self . worker . removeEventListener ( 'message' , self . onWorkerMessage ) ;
575+ self . worker . removeEventListener ( 'error' , self . workerError ) ;
552576 self . workerActive = false ;
577+ self . worker = null ;
578+
553579 // Remove the canvas element to remove residual subtitles rendered on player
554580 if ( self . video ) {
581+ self . video . removeEventListener ( 'timeupdate' , onTimeUpdate , false ) ;
582+ self . video . removeEventListener ( 'playing' , onPlaying , false ) ;
583+ self . video . removeEventListener ( 'pause' , onPause , false ) ;
584+ self . video . removeEventListener ( 'seeking' , onSeeking , false ) ;
585+ self . video . removeEventListener ( 'seeked' , onSeeked , false ) ;
586+ self . video . removeEventListener ( 'ratechange' , onRateChange , false ) ;
587+ self . video . removeEventListener ( 'waiting' , onWaiting , false ) ;
588+ self . video . removeEventListener ( 'loadedmetadata' , onLoadedMetadata , false ) ;
589+
590+ document . removeEventListener ( 'fullscreenchange' , self . resizeWithTimeout , false ) ;
591+ document . removeEventListener ( 'mozfullscreenchange' , self . resizeWithTimeout , false ) ;
592+ document . removeEventListener ( 'webkitfullscreenchange' , self . resizeWithTimeout , false ) ;
593+ document . removeEventListener ( 'msfullscreenchange' , self . resizeWithTimeout , false ) ;
594+ window . removeEventListener ( 'resize' , self . resizeWithTimeout , false ) ;
595+
555596 self . video . parentNode . removeChild ( self . canvasParent ) ;
597+
598+ self . video = null ;
556599 }
600+
601+ if ( self . ro ) {
602+ self . ro . disconnect ( ) ;
603+ self . ro = null ;
604+ }
605+
606+ self . onCustomMessage = null ;
607+ self . onErrorEvent = null ;
608+ self . onReadyEvent = null ;
557609 } ;
558610
559611 self . fetchFromWorker = function ( workerOptions , onSuccess , onError ) {
0 commit comments