@@ -28,10 +28,11 @@ class MP4VideoPlayer extends PolymerElement {
28
28
autoplay$ ="[[autoPlay]] "
29
29
loop$ ="[[loop]] "
30
30
poster$ ="[[poster]] "
31
- on-play ="_onPlay "
31
+ on-play ="_firePlayEvent "
32
+ on-pause ="_firePauseEvent "
33
+ on-ended ="_fireEndedEvent "
32
34
on-loadedmetadata ="_metadetaLoaded "
33
- on-timeupdate ="_handleTimeUpdate "
34
- on-ended ="_handleEnd ">
35
+ on-timeupdate ="_handleTimeUpdate ">
35
36
< source src$ ="{{videoFilePath}} " type ="video/mp4 ">
36
37
</ video >
37
38
< div class ="video-controls ">
@@ -439,6 +440,7 @@ class MP4VideoPlayer extends PolymerElement {
439
440
*/
440
441
_metadetaLoaded ( event ) {
441
442
const { duration } = event . currentTarget ;
443
+ this . _fireLoadedmetadata ( ) ;
442
444
this . _setDuration ( duration ) ;
443
445
this . _formattedDuration = this . _formatTime ( duration ) ;
444
446
}
@@ -471,13 +473,109 @@ class MP4VideoPlayer extends PolymerElement {
471
473
return `${ mins } :${ secs } ` ;
472
474
}
473
475
476
+ _createEvent ( eventName , detail ) {
477
+ return new CustomEvent ( eventName , { bubbles : true , detail } ) ;
478
+ }
479
+
480
+ /**
481
+ * Fire the appropriate event based on event type
482
+ */
483
+ fireEvent ( type ) {
484
+ switch ( type ) {
485
+ case 'loaded' :
486
+ this . _fireLoadedmetadata ( ) ;
487
+ break ;
488
+ case 'play' :
489
+ this . _firePlayEvent ( ) ;
490
+ break ;
491
+ case 'pause' :
492
+ this . _firePauseEvent ( ) ;
493
+ break ;
494
+ case 'ended' :
495
+ this . _fireEndedEvent ( ) ;
496
+ break ;
497
+ case 'enterFullscreen' :
498
+ this . _fireEnterFullscreenEvent ( ) ;
499
+ break ;
500
+ case 'exitFullscreen' :
501
+ this . _fireExitFullscreenEvent ( ) ;
502
+ break ;
503
+ case 'timeUpdated' :
504
+ this . _fireTimeUpdatedEvent ( ) ;
505
+ break ;
506
+ case 'volumeChange' :
507
+ this . _fireVolumeChangeEvent ( ) ;
508
+ break ;
509
+ default :
510
+ break ;
511
+ }
512
+ }
513
+
514
+ /**
515
+ * When the video has paused
516
+ */
517
+ _fireLoadedmetadata ( ) {
518
+ const { duration } = this . _getShadowElementById ( 'video_player' ) ;
519
+ this . dispatchEvent ( this . _createEvent ( 'loadedmetadata' , { duration } ) ) ;
520
+ }
521
+
474
522
/**
475
523
* When the video has started to play
476
524
*/
477
- _onPlay ( ) {
525
+ _firePlayEvent ( ) {
526
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
478
527
if ( this . autoPlay ) {
479
528
this . _setPlaying ( true ) ; // change the state of the track controls when initially playing..
480
529
}
530
+ this . dispatchEvent ( this . _createEvent ( 'play' , { currentTime } ) ) ;
531
+ }
532
+
533
+ /**
534
+ * When the video has paused
535
+ */
536
+ _firePauseEvent ( ) {
537
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
538
+ this . dispatchEvent ( this . _createEvent ( 'pause' , { currentTime } ) ) ;
539
+ }
540
+
541
+ /**
542
+ * When the video has ended
543
+ */
544
+ _fireEndedEvent ( ) {
545
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
546
+ this . dispatchEvent ( this . _createEvent ( 'ended' , { currentTime } ) ) ;
547
+ }
548
+
549
+ /**
550
+ * When the video has enter fullscreen
551
+ */
552
+ _fireEnterFullscreenEvent ( ) {
553
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
554
+ this . dispatchEvent ( this . _createEvent ( 'enterFullscreen' , { currentTime } ) ) ;
555
+ }
556
+
557
+ /**
558
+ * When the video has exited fullscreen
559
+ */
560
+ _fireExitFullscreenEvent ( ) {
561
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
562
+ this . dispatchEvent ( this . _createEvent ( 'exitFullscreen' , { currentTime } ) ) ;
563
+ }
564
+
565
+ /**
566
+ * When the video has exited fullscreen
567
+ */
568
+ _fireTimeUpdatedEvent ( ) {
569
+ const { currentTime } = this . _getShadowElementById ( 'video_player' ) ;
570
+ this . dispatchEvent ( this . _createEvent ( 'timeUpdated' , { currentTime } ) ) ;
571
+ }
572
+
573
+ /**
574
+ * When the video has changed volume
575
+ */
576
+ _fireVolumeChangeEvent ( ) {
577
+ const { volume } = this . _getShadowElementById ( 'video_player' ) ;
578
+ this . dispatchEvent ( this . _createEvent ( 'volumeChange' , { volume } ) ) ;
481
579
}
482
580
483
581
/**
@@ -501,6 +599,7 @@ class MP4VideoPlayer extends PolymerElement {
501
599
*/
502
600
_updateCurrentTime ( progress ) {
503
601
const video = this . _getShadowElementById ( 'video_player' ) ;
602
+ this . _fireTimeUpdatedEvent ( ) ;
504
603
video . currentTime = progress ;
505
604
}
506
605
@@ -583,7 +682,13 @@ class MP4VideoPlayer extends PolymerElement {
583
682
* @private
584
683
*/
585
684
_handleFullscreenChange ( ) {
586
- this . _setFullscreen ( ! ! document . fullscreenElement ) ;
685
+ const isFullscreen = ! ! document . fullscreenElement ;
686
+ if ( isFullscreen ) {
687
+ this . _fireEnterFullscreenEvent ( ) ;
688
+ } else {
689
+ this . _fireExitFullscreenEvent ( ) ;
690
+ }
691
+ this . _setFullscreen ( isFullscreen ) ;
587
692
}
588
693
589
694
/**
@@ -610,15 +715,6 @@ class MP4VideoPlayer extends PolymerElement {
610
715
this . volume = 0 ;
611
716
}
612
717
613
- /**
614
- * Dispatch a custom event when the video has
615
- * ended
616
- * @private
617
- */
618
- _handleEnd ( ) {
619
- this . dispatchEvent ( new CustomEvent ( 'videoEnded' , { detail : { ended : true } } ) ) ;
620
- }
621
-
622
718
/**
623
719
* Toggle play the player
624
720
* @private
@@ -690,6 +786,7 @@ class MP4VideoPlayer extends PolymerElement {
690
786
this . prevVolume = oldVolume ;
691
787
this . _setTrackPosition ( newVolume , maxVolume , 'volume_' ) ;
692
788
this . _getShadowElementById ( 'video_player' ) . volume = newVolume ;
789
+ this . _fireVolumeChangeEvent ( ) ;
693
790
}
694
791
695
792
/**
0 commit comments