aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/plugins/vimeo.js
diff options
context:
space:
mode:
authorSam Potts <sam@potts.es>2018-05-26 13:55:22 +1000
committerGitHub <noreply@github.com>2018-05-26 13:55:22 +1000
commitf0be913dc384c5a229af70b69711ab246226c1a3 (patch)
tree1919f9f0ead11712f3a94eeed2e5b6da0130c8f9 /src/js/plugins/vimeo.js
parentc41bb657ac490d032f2992845d21a457a7faedf1 (diff)
parentcd51788b980a7bc7b5caaf2d595d2077be4138f5 (diff)
downloadplyr-f0be913dc384c5a229af70b69711ab246226c1a3.tar.lz
plyr-f0be913dc384c5a229af70b69711ab246226c1a3.tar.xz
plyr-f0be913dc384c5a229af70b69711ab246226c1a3.zip
Merge pull request #975 from sampotts/develop
v3.3.8
Diffstat (limited to 'src/js/plugins/vimeo.js')
-rw-r--r--src/js/plugins/vimeo.js74
1 files changed, 36 insertions, 38 deletions
diff --git a/src/js/plugins/vimeo.js b/src/js/plugins/vimeo.js
index 0ceb89e5..46d4f3f9 100644
--- a/src/js/plugins/vimeo.js
+++ b/src/js/plugins/vimeo.js
@@ -7,6 +7,14 @@ import controls from './../controls';
import ui from './../ui';
import utils from './../utils';
+// Set playback state and trigger change (only on actual change)
+function assurePlaybackState(play) {
+ if (this.media.paused === play) {
+ this.media.paused = !play;
+ utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');
+ }
+}
+
const vimeo = {
setup() {
// Add embed class for responsive
@@ -99,11 +107,8 @@ const vimeo = {
// Get original image
url.pathname = `${url.pathname.split('_')[0]}.jpg`;
- // Set attribute
- player.media.setAttribute('poster', url.href);
-
- // Update
- ui.setPoster.call(player);
+ // Set and show poster
+ ui.setPoster.call(player, url.href);
});
// Setup instance
@@ -123,15 +128,13 @@ const vimeo = {
// Create a faux HTML5 API using the Vimeo API
player.media.play = () => {
- player.embed.play().then(() => {
- player.media.paused = false;
- });
+ assurePlaybackState.call(player, true);
+ return player.embed.play();
};
player.media.pause = () => {
- player.embed.pause().then(() => {
- player.media.paused = true;
- });
+ assurePlaybackState.call(player, false);
+ return player.embed.pause();
};
player.media.stop = () => {
@@ -146,25 +149,26 @@ const vimeo = {
return currentTime;
},
set(time) {
- // Get current paused state
- // Vimeo will automatically play on seek
- const { paused } = player.media;
-
- // Set seeking flag
- player.media.seeking = true;
-
- // Trigger seeking
- utils.dispatchEvent.call(player, player.media, 'seeking');
-
- // Seek after events
- player.embed.setCurrentTime(time).catch(() => {
- // Do nothing
- });
-
- // Restore pause state
- if (paused) {
- player.pause();
- }
+ // Vimeo will automatically play on seek if the video hasn't been played before
+
+ // Get current paused state and volume etc
+ const { embed, media, paused, volume } = player;
+
+ // Set seeking state and trigger event
+ media.seeking = true;
+ utils.dispatchEvent.call(player, media, 'seeking');
+
+ // If paused, mute until seek is complete
+ Promise.resolve(paused && embed.setVolume(0))
+ // Seek
+ .then(() => embed.setCurrentTime(time))
+ // Restore paused
+ .then(() => paused && embed.pause())
+ // Restore volume
+ .then(() => paused && embed.setVolume(volume))
+ .catch(() => {
+ // Do nothing
+ });
},
});
@@ -318,17 +322,12 @@ const vimeo = {
});
player.embed.on('play', () => {
- // Only fire play if paused before
- if (player.media.paused) {
- utils.dispatchEvent.call(player, player.media, 'play');
- }
- player.media.paused = false;
+ assurePlaybackState.call(player, true);
utils.dispatchEvent.call(player, player.media, 'playing');
});
player.embed.on('pause', () => {
- player.media.paused = true;
- utils.dispatchEvent.call(player, player.media, 'pause');
+ assurePlaybackState.call(player, false);
});
player.embed.on('timeupdate', data => {
@@ -359,7 +358,6 @@ const vimeo = {
player.embed.on('seeked', () => {
player.media.seeking = false;
utils.dispatchEvent.call(player, player.media, 'seeked');
- utils.dispatchEvent.call(player, player.media, 'play');
});
player.embed.on('ended', () => {