Loading tweaks, Microsoft Edge tweaks

This commit is contained in:
Sam Potts
2016-08-21 19:25:21 +10:00
parent aac0a5a3a9
commit a8062354ec
9 changed files with 95 additions and 124 deletions

View File

@ -616,7 +616,7 @@
element: null,
prefix: ''
},
browserPrefixes = 'webkit moz o ms khtml'.split(' ');
browserPrefixes = 'webkit o ms khtml'.split(' ');
// Check for native support
if (!_is.undefined(document.cancelFullScreen)) {
@ -653,8 +653,6 @@
switch (this.prefix) {
case '':
return document.fullscreenElement === element;
case 'moz':
return document.mozFullScreenElement === element;
default:
return document[this.prefix + 'FullscreenElement'] === element;
}
@ -1657,7 +1655,7 @@
},
events: {
'onError': function(event) {
_triggerEvent(container, 'error', true, {
_triggerEvent(plyr.container, 'error', true, {
code: event.data,
embed: event.target
});
@ -1681,7 +1679,7 @@
};
plyr.media.duration = instance.getDuration();
plyr.media.paused = true;
plyr.media.currentTime = instance.getCurrentTime();
plyr.media.currentTime = 0;
plyr.media.muted = instance.isMuted();
// Set title
@ -1698,6 +1696,9 @@
// Trigger timeupdate
_triggerEvent(plyr.media, 'timeupdate');
// Trigger timeupdate
_triggerEvent(plyr.media, 'durationchange');
// Reset timer
window.clearInterval(timers.buffering);
@ -1722,9 +1723,6 @@
_triggerEvent(plyr.media, 'canplaythrough');
}
}, 200);
// Display duration if available
_displayDuration();
},
'onStateChange': function(event) {
// Get the instance
@ -1769,7 +1767,7 @@
break;
}
_triggerEvent(container, 'statechange', false, {
_triggerEvent(plyr.container, 'statechange', false, {
code: event.data
});
}
@ -1819,9 +1817,9 @@
plyr.embed.getDuration().then(function(value) {
plyr.media.duration = value;
// Display duration if available
_displayDuration();
// Trigger timeupdate
_triggerEvent(plyr.media, 'durationchange');
});
// TODO: Captions
@ -1895,8 +1893,12 @@
plyr.media.paused = true;
plyr.media.currentTime = 0;
// Update UI
_embedReady();
plyr.embed.getDuration(function(value) {
plyr.media.duration = value/1000;
// Update UI
_embedReady();
});
plyr.embed.getPosition(function(value) {
plyr.media.currentTime = value;
@ -1905,12 +1907,6 @@
_triggerEvent(plyr.media, 'timeupdate');
});
plyr.embed.getDuration(function(value) {
plyr.media.duration = value/1000;
// Display duration if available
_displayDuration();
});
plyr.embed.bind(window.SC.Widget.Events.PLAY, function() {
plyr.media.paused = false;
_triggerEvent(plyr.media, 'play');
@ -1942,11 +1938,6 @@
plyr.media.paused = true;
_triggerEvent(plyr.media, 'ended');
});
// Autoplay
if (config.autoplay) {
plyr.embed.play();
}
});
}
@ -2093,6 +2084,7 @@
// Check playing state
function _checkPlaying() {
_toggleClass(plyr.container, config.classes.playing, !plyr.media.paused);
_toggleClass(plyr.container, config.classes.stopped, plyr.media.paused);
_toggleControls(plyr.media.paused);
@ -2115,7 +2107,6 @@
function _toggleFullscreen(event) {
// Check for native support
var nativeSupport = fullscreen.supportsFullScreen;
if (nativeSupport) {
// If it's a fullscreen change event, update the UI
@ -2138,7 +2129,7 @@
}
// Check if we're actually full screen (it could fail)
// plyr.isFullscreen = fullscreen.isFullScreen(plyr.container);
plyr.isFullscreen = fullscreen.isFullScreen(plyr.container);
return;
}
@ -2349,7 +2340,11 @@
// Timer to prevent flicker when seeking
timers.loading = setTimeout(function() {
// Toggle container class hook
_toggleClass(plyr.container, config.classes.loading, loading);
// Show controls if loading, hide if done
_toggleControls(loading);
}, (loading ? 250 : 0));
}
@ -2578,14 +2573,15 @@
// Show the player controls in fullscreen mode
function _toggleControls(toggle) {
// Don't hide if config says not to, it's audio, or not loaded/ready
if (!config.hideControls || plyr.type === 'audio' || !_hasClass(plyr.container, config.classes.ready)) {
// Don't hide if config says not to, it's audio, or not ready or loading
if (!config.hideControls || plyr.type === 'audio') {
return;
}
var delay = 0,
isEnterFullscreen = false,
show = toggle;
show = toggle,
loading = _hasClass(plyr.container, config.classes.loading);
// Default to false if no boolean
if (!_is.boolean(toggle)) {
@ -2615,11 +2611,11 @@
window.clearTimeout(timers.hover);
// If the mouse is not over the controls, set a timeout to hide them
if (show || plyr.media.paused) {
if (show || plyr.media.paused || loading) {
_toggleClass(plyr.container, config.classes.hideControls, false);
// Always show controls when paused or if touch
if (plyr.media.paused) {
if (plyr.media.paused || loading) {
return;
}
@ -2686,6 +2682,9 @@
return;
}
// Remove ready class hook
_toggleClass(plyr.container, config.classes.ready, false);
// Pause playback
_pause();
@ -2698,22 +2697,19 @@
// Cancel current network requests
_cancelRequests();
// Remove ready class hook
_toggleClass(plyr.container, config.classes.ready, false);
// Setup new source
function setup() {
// Remove embed object
plyr.embed = null;
// Remove the old media
_remove(plyr.media);
// Remove video container
if (plyr.type === 'video' && plyr.videoContainer) {
_remove(plyr.videoContainer);
}
// Remove the old media
_remove(plyr.media);
// Reset class name
if (plyr.container) {
plyr.container.removeAttribute('class');
@ -2800,21 +2796,16 @@
// Load HTML5 sources
plyr.media.load();
}
// If HTML5 or embed but not fully supported, setupInterface and call ready now
if (_inArray(config.types.html5, plyr.type) || (_inArray(config.types.embed, plyr.type) && !plyr.supported.full)) {
// Setup interface
_setupInterface();
// Display duration if available
_displayDuration();
// Call ready
_ready();
}
// If embed but not fully supported, setupInterface and call ready now
else if (_inArray(config.types.embed, plyr.type) && !plyr.supported.full) {
_setupInterface();
_ready();
}
// Set aria title and iframe title
config.title = source.title;
@ -2906,13 +2897,11 @@
// Keyboard shortcuts
if (config.keyboardShorcuts) {
//var held = false;
var first = true;
_on(plyr.container, 'keyup keydown', function(event) {
_on(plyr.container, 'keydown keyup', function(event) {
var code = getKeyCode(event),
down = event.type === 'keydown',
first = true,
timer;
pressed = event.type === 'keydown';
// Seek by the number keys
function seekByKey() {
@ -2928,9 +2917,9 @@
_seek((duration / 10) * (code - 48));
}
function handleKey() {
console.log(code);
// Handle the key on keydown
// Reset on keyup
if (pressed) {
switch(code) {
// 0-9
case 48:
@ -2945,7 +2934,7 @@
case 57: if (first) { seekByKey() } break;
// Space and K key
case 32:
case 75: if (first) { _togglePlay() } break;
case 75: if (first) { _togglePlay(); } break;
// Arrow up
case 38: _increaseVolume(); break;
// Arrow down
@ -2971,16 +2960,8 @@
// First run completed
first = false;
}
if (down) {
handleKey();
// If a key is held for 200ms, run again
// Handy for volume and skip
timer = setTimeout(handleKey, 200);
}
else {
clearTimeout(timer);
first = true;
}
});
}
@ -3108,22 +3089,16 @@
// Handle the media finishing
_on(plyr.media, 'ended', function() {
// Clear
if (plyr.type === 'video') {
_setCaption();
}
// Reset UI
_checkPlaying();
// Seek to 0
_seek(0);
// Reset duration display
_displayDuration();
// Show poster on end
if(plyr.type === 'video' && config.showPosterOnEnd) {
// Clear
if (plyr.type === 'video') {
_setCaption();
}
// Restart
_seek();
// Re-load media
plyr.media.load();
}
@ -3136,7 +3111,7 @@
_on(plyr.media, 'volumechange', _updateVolume);
// Handle native play/pause
_on(plyr.media, 'play pause', _checkPlaying);
_on(plyr.media, 'play pause ended', _checkPlaying);
// Loading
_on(plyr.media, 'waiting canplay seeked', _checkLoading);
@ -3180,7 +3155,7 @@
}
// Proxy events to container
_on(plyr.media, config.events.join(' '), function(event) {
_on(plyr.media, config.events.concat(['keyup', 'keydown']).join(' '), function(event) {
_triggerEvent(plyr.container, event.type, true);
});
}
@ -3209,7 +3184,7 @@
plyr.media.load();
// Debugging
_log('Cancelled network requests for old media');
_log('Cancelled network requests');
}
// Destroy an instance
@ -3347,25 +3322,16 @@
_setupMedia();
// Setup interface
if (_inArray(config.types.html5, plyr.type)) {
// If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now
if (_inArray(config.types.html5, plyr.type) || (_inArray(config.types.embed, plyr.type) && !plyr.supported.full)) {
// Setup UI
_setupInterface();
// Set title on button and frame
_setTitle();
// Autoplay
if (config.autoplay) {
_play();
}
// Call ready
_ready();
}
// If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now
else if (_inArray(config.types.embed, plyr.type) && !plyr.supported.full) {
_setupInterface();
_ready();
// Set title on button and frame
_setTitle();
}
// Successful setup
@ -3429,9 +3395,6 @@
// Update the UI
_checkPlaying();
// Display duration
_displayDuration();
}
api = {
@ -3441,6 +3404,7 @@
getMedia: function() { return plyr.media; },
getType: function() { return plyr.type; },
isReady: function() { return _hasClass(plyr.container, config.classes.ready); },
isLoading: function() { return _hasClass(plyr.container, config.classes.loading); },
on: function(event, callback) { _on(plyr.container, event, callback); },
play: _play,
pause: _pause,
@ -3476,6 +3440,11 @@
// Store a refernce to instance
plyr.media.plyr = api;
// Autoplay
if (config.autoplay) {
_play();
}
}
// Initialize instance
@ -3670,7 +3639,7 @@
if (config.debug) {
var events = config.events.concat(['setup', 'ready', 'statechange', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled']);
_on(instance.getContainer(), events.join(' '), function() {
_on(instance.getContainer(), events.join(' '), function(event) {
console.log([config.logPrefix, 'event:', event.type].join(' '), event.detail.plyr);
});
}
@ -3704,7 +3673,9 @@
instances = [];
Array.prototype.slice.call(elements).forEach(function(element) {
instances.push(element.plyr);
if (_is.object(element.plyr)) {
instances.push(element.plyr);
}
});
return instances;

View File

@ -728,7 +728,7 @@
width: 100%;
z-index: 10000000;
background: #000;
border-radius: 0;
border-radius: 0 !important;
video {
height: 100%;

View File

@ -727,7 +727,7 @@
width: 100%;
z-index: 10000000;
background: #000;
border-radius: 0;
border-radius: 0 !important;
video {
height: 100%;