Untitled

 avatar
unknown
javascript
a year ago
2.0 kB
7
Indexable
<template>
	<div class="demo-centered">
		<div v-if="demoVideo">
			<video ref="demoVideo" :src="demoVideo" class="preloaded-video" playsinline></video>
		</div>
	</div>
</template>
<script setup>
	import { ref, onMounted, onBeforeUnmount, computed } from "vue";
	import axios from "axios";
	import { useRouter } from "vue-router";
	const router = useRouter();
	
	const demoVideoRef = ref(null);
	const videos = ref([]);
	const setVideosBasedOnLanguage = () => {
		const prefix = getAudioPrefix(language.value);
		videos.value = [
			`${prefix}_DemoVideo.mp4`
		];
	};
	const preloadedVideos = ref([]);
	const preloadVideos = async () => {
		const getVideoUrl = async (src) => {
			const filePath = videoFiles[`/src/assets/${src}`];
			if (filePath) {
				return (await filePath()).default;
			} else {
				throw new Error(`Video file not found: ${src}`);
			}
		};

		const videoPromises = videos.value.map(src => {
			return new Promise((resolve, reject) => {
				const video = document.createElement('video');
				getVideoUrl(src).then(fileUrl => {
					video.src = fileUrl;
					video.onloadeddata = () => resolve(video);
					video.onerror = (error) => {
						console.error('Video failed to load:', error);
						reject(error);
					};
				}).catch(error => {
					console.error('Error resolving video file:', error);
					reject(error);
				});
			});
		});

		try {
			preloadedVideos.value = await Promise.all(videoPromises);
		} catch (error) {
			console.error('Error preloading videos:', error);
		}
	};

	const demoVideo = computed(() => preloadedVideos.value[0]?.src || '');

	onMounted(async () => {
		await preloadVideos();
	});

	function playDemoVideo() {
		if (demoVideoRef.value) {
			demoVideoRef.value.play();
		}
	}

	function stopAllVideoPlayback() {
	  preloadedVideos.value.forEach(video => {
		if (video instanceof HTMLVideoElement) {
		  video.pause();
		  video.currentTime = 0;
		}
	  });
	}
</script>
Editor is loading...
Leave a Comment