Fix for event listeners being duplicated on source change

This commit is contained in:
Sam
2016-01-17 01:25:11 +11:00
parent f18fb3f26d
commit f87a10ae0b
7 changed files with 62 additions and 40 deletions

View File

@ -2196,13 +2196,15 @@
}
}
// Listen for events
function _listeners() {
// Listen for control events
function _controlListeners() {
// IE doesn't support input event, so we fallback to change
var inputEvent = (plyr.browser.name == 'IE' ? 'change' : 'input');
// Click play/pause helper
function _togglePlay(play) {
function _togglePlay() {
var play = plyr.media.paused;
// Toggle playback
if (play) {
_play();
@ -2264,10 +2266,10 @@
}
// Play
_proxyHandler(plyr.buttons.play, 'click', config.handlers.play, function() { _togglePlay(true); });
_proxyHandler(plyr.buttons.play, 'click', config.handlers.play, _togglePlay);
// Pause
_proxyHandler(plyr.buttons.pause, 'click', config.handlers.pause, function() { _togglePlay(); });
_proxyHandler(plyr.buttons.pause, 'click', config.handlers.pause, _togglePlay);
// Restart
_proxyHandler(plyr.buttons.restart, 'click', config.handlers.restart, _seek);
@ -2297,6 +2299,28 @@
_on(document, fullscreen.fullScreenEventName, _toggleFullscreen);
}
// Captions
_on(plyr.buttons.captions, 'click', _toggleCaptions);
// Click video
if (plyr.type === 'video' && config.click) {
_on(plyr.videoContainer, 'click', function() {
if (plyr.media.paused) {
_play();
}
else if (plyr.media.ended) {
_seek();
_play();
}
else {
_pause();
}
});
}
}
// Listen for media events
function _mediaListeners() {
// Time change on media
_on(plyr.media, 'timeupdate seeking', _timeUpdate);
@ -2306,9 +2330,6 @@
// Display duration
_on(plyr.media, 'loadedmetadata', _displayDuration);
// Captions
_on(plyr.buttons.captions, 'click', _toggleCaptions);
// Handle the media finishing
_on(plyr.media, 'ended', function() {
// Clear
@ -2331,22 +2352,6 @@
// Loading
_on(plyr.media, 'waiting canplay seeked', _checkLoading);
// Click video
if (plyr.type === 'video' && config.click) {
_on(plyr.videoContainer, 'click', function() {
if (plyr.media.paused) {
_play();
}
else if (plyr.media.ended) {
_seek();
_play();
}
else {
_pause();
}
});
}
}
// Destroy an instance
@ -2482,26 +2487,32 @@
return;
}
// Inject custom controls
if (!_getElements(config.selectors.controls.wrapper).length) {
// Inject custom controls if not present
var controlsMissing = !_getElements(config.selectors.controls.wrapper).length;
if (controlsMissing) {
// Inject custom controls
_injectControls();
}
// Remove native controls
_toggleControls();
// Find the elements
if (!_findElements()) {
return;
}
// If the controls are injected, re-bind listeners for controls
if (controlsMissing) {
_controlListeners();
}
// Media element listeners
_mediaListeners();
// Remove native controls
_toggleControls();
// Setup fullscreen
_setupFullscreen();
// Listeners
_listeners();
// Captions
_setupCaptions();