fix: ensure video element is ready before playing (#871)

This commit is contained in:
Joaquín Sánchez 2023-01-08 15:13:03 +01:00 committed by GitHub
parent e92a983947
commit f8692ed480
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -65,14 +65,23 @@ const video = ref<HTMLVideoElement | undefined>()
const prefersReducedMotion = usePreferredReducedMotion()
useIntersectionObserver(video, (entries) => {
if (prefersReducedMotion.value === 'reduce')
const ready = video.value?.dataset.ready === 'true'
if (prefersReducedMotion.value === 'reduce') {
if (ready && !video.value?.paused)
video.value?.pause()
return
}
entries.forEach((entry) => {
if (entry.intersectionRatio <= 0.75)
!video.value!.paused && video.value!.pause()
else
video.value!.play()
if (entry.intersectionRatio <= 0.75) {
ready && !video.value?.paused && video.value?.pause()
}
else {
video.value?.play().then(() => {
video.value!.dataset.ready = 'true'
}).catch(noop)
}
})
}, { threshold: 0.75 })
</script>