144 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
		
			Executable File
		
	
	
| <template>
 | |
| 	<video
 | |
| 		ref="player"
 | |
| 		:poster="poster"
 | |
| 		crossorigin="anonymous"
 | |
| 		class="player video-js vjs-big-play-centered"
 | |
| 		@playing="$emit('play')"
 | |
| 		@pause="$emit('pause')"
 | |
| 	/>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import videoJs from 'video.js';
 | |
| import 'videojs-vr/dist/videojs-vr.min';
 | |
| 
 | |
| function updatePlayer() {
 | |
| 	this.player.src(this.getPath(this.video));
 | |
| 	this.player.poster(this.poster);
 | |
| }
 | |
| 
 | |
| function initPlayer() {
 | |
| 	this.player = videoJs(this.$refs.player, {
 | |
| 		controls: true,
 | |
| 		inactivityTimeout: 1000,
 | |
| 		controlBar: {
 | |
| 			pictureInPictureToggle: false,
 | |
| 			volumePanel: {
 | |
| 				inline: false,
 | |
| 			},
 | |
| 		},
 | |
| 	}, () => {
 | |
| 		this.player.src(this.getPath(this.video));
 | |
| 
 | |
| 		if (this.video.isVr) {
 | |
| 			this.player.vr({ projection: '180' });
 | |
| 		}
 | |
| 	});
 | |
| }
 | |
| 
 | |
| export default {
 | |
| 	props: {
 | |
| 		video: {
 | |
| 			type: Object,
 | |
| 			default: null,
 | |
| 		},
 | |
| 		poster: {
 | |
| 			type: String,
 | |
| 			default: null,
 | |
| 		},
 | |
| 	},
 | |
| 	data() {
 | |
| 		return {
 | |
| 			player: null,
 | |
| 		};
 | |
| 	},
 | |
| 	emits: ['play', 'pause'],
 | |
| 	watch: {
 | |
| 		video: updatePlayer,
 | |
| 		poster: updatePlayer,
 | |
| 	},
 | |
| 	mounted: initPlayer,
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="scss">
 | |
| .player.video-js {
 | |
| 	.vjs-poster {
 | |
| 		background-size: cover;
 | |
| 	}
 | |
| 
 | |
| 	.vjs-control-bar {
 | |
| 		background-color: var(--darken);
 | |
| 	}
 | |
| 
 | |
| 	.vjs-slider {
 | |
| 		background-color: var(--darken-weak);
 | |
| 	}
 | |
| 
 | |
| 	.vjs-play-progress {
 | |
| 		background-color: var(--primary);
 | |
| 
 | |
| 		.vjs-time-tooltip {
 | |
| 			color: var(--darken-strong);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	.vjs-load-progress {
 | |
| 		background-color: var(--lighten-weak);
 | |
| 
 | |
| 		div {
 | |
| 			background-color: var(--darken-weak);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	.vjs-mouse-display .vjs-time-tooltip {
 | |
| 		background-color: var(--darken-strong);
 | |
| 	}
 | |
| 
 | |
| 	.vjs-remaining-time {
 | |
| 		line-height: 2rem;
 | |
| 		font-size: .75rem;
 | |
| 		font-weight: bold;
 | |
| 	}
 | |
| 
 | |
| 	.vjs-big-play-button {
 | |
| 		background-color: var(--darken);
 | |
| 		width: 4rem;
 | |
| 		height: 4rem;
 | |
| 		margin: -2rem 0 0 -2rem;
 | |
| 		border: none;
 | |
| 		border-radius: 50%;
 | |
| 
 | |
| 		.vjs-icon-placeholder {
 | |
| 			font-size: 2.5rem;
 | |
| 			line-height: 4rem;
 | |
| 		}
 | |
| 
 | |
| 		&:hover {
 | |
| 			background-color: var(--primary);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	.vjs-control:focus::before,
 | |
| 	.vjs-control:hover::before,
 | |
| 	.vjs-control:focus {
 | |
| 		text-shadow: 0 0 .5rem var(--lighten-strong);
 | |
| 	}
 | |
| 
 | |
| 	.vjs-error-display {
 | |
| 		overflow: hidden;
 | |
| 	}
 | |
| 
 | |
| 	.vjs-modal-dialog-content {
 | |
| 		white-space: normal;
 | |
| 	}
 | |
| 
 | |
| 	&:hover {
 | |
| 		.vjs-big-play-button {
 | |
| 			background-color: var(--primary);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| </style>
 |