1
0
mirror of https://github.com/videojs/video.js.git synced 2024-12-27 02:43:45 +02:00
On ended, pause player if not paused or looping
IE11 (and maybe other browsers as well) only fire 'ended' event when the
video ends and doesn't fire pause. This makes IE11 not reset it's state
into a paused state that allows a user to replay immediately. However, a
two clicks on the play/pause button will allow you to replay.
In Chrome, we get first a pause event and then an ended event. When
'loop' is set, neither the last pause nor ended fire.
In the flash tech, the pause and ended events fire like in chrome in all
browsers.

Add tests for onEnded change

Appease jshint.
This commit is contained in:
Gary Katsevman 2014-09-16 13:55:55 -04:00 committed by Steve Heffernan
parent 18965bb8d7
commit 53ea60cd06
2 changed files with 30 additions and 0 deletions

View File

@ -511,6 +511,8 @@ vjs.Player.prototype.onEnded = function(){
if (this.options_['loop']) { if (this.options_['loop']) {
this.currentTime(0); this.currentTime(0);
this.play(); this.play();
} else if (!this.paused()) {
this.pause();
} }
}; };

View File

@ -618,3 +618,31 @@ test('should clear pending errors on disposal', function() {
} }
ok(true, 'did not throw an error after disposal'); ok(true, 'did not throw an error after disposal');
}); });
test('pause is called when player ended event is fired and player is not paused', function() {
var video = document.createElement('video'),
player = PlayerTest.makePlayer({}, video),
pauses = 0;
player.paused = function() {
return false;
};
player.pause = function() {
pauses++;
};
player.trigger('ended');
equal(pauses, 1, 'pause was called');
});
test('pause is not called if the player is paused and ended is fired', function() {
var video = document.createElement('video'),
player = PlayerTest.makePlayer({}, video),
pauses = 0;
player.paused = function() {
return true;
};
player.pause = function() {
pauses++;
};
player.trigger('ended');
equal(pauses, 0, 'pause was not called when ended fired');
});