Маловероятно, что он работает как есть.
Вы уже установили source
на video
, поэтому, даже если функция работает, видеофайл уже существует, поэтому нет ленивой загрузки. ..
Это правильная настройка:
<video id="myVideo" autoplay loop muted playsinline src="">
<source data-src="<?= VIDEO ?>/video_footer.mp4" type="video/mp4">
</video>
Затем вы можете проверить, работает ли ваша функция
Другой Решение состоит в том, чтобы использовать intersection observer
и делать это с pure JavaScript
, простым, легким и работающим в большинстве случаев
Ленивые загрузки видео с чистым JavaScript:
<script type="text/javascript">
const lazyvideo = document.querySelectorAll('.lazy-video');
observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('video in the view');
if (entry.target.querySelector('source').getAttribute('data-src') !== null) {
const source = entry.target.querySelector('source').getAttribute('data-src')
entry.target.setAttribute('src', source);
}
observer.unobserve(entry.target);
} else {
console.log('video out of view');
}
});
});
lazyvideo.forEach(video => {
observer.observe(video);
});
</script>
Я добавил console.log('video out of view');
& console.log('video in the view');
, чтобы проверить консоль, просматривается ли видео.
С помощью этого сценария, если вы хотите, чтобы видео загружалось лениво, просто добавьте class lazy-video
к нему, и все готово;)
Полный код:
const lazyvideo = document.querySelectorAll('.lazy-video');
observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.intersectionRatio > 0) {
console.log('video in the view');
if (entry.target.querySelector('source').getAttribute('data-src') !== null) {
const source = entry.target.querySelector('source').getAttribute('data-src')
entry.target.setAttribute('src', source);
}
observer.unobserve(entry.target);
} else {
console.log('video out of view');
}
});
});
lazyvideo.forEach(video => {
observer.observe(video);
});
#myVideo {
max-width:400px;
width:100%;
}
<video id="myVideo" class="lazy-video" autoplay loop muted playsinline src="">
<source data-src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4">
</video>
Если вы хотите быть уверены, что ленивая нагрузка работает
- Откройте вам Chrome Инструменты разработчика и go на
Network
и выберите вкладку media
- Пока инструменты открыты, перезагрузите страницу
- Если вы не прокрутите раздел видео, вы не должны видеть видео в консоли
- При прокрутке, когда вы просматриваете раздел видео, вы должны увидеть загрузку видео на вкладке мультимедиа
См. скриншоты ниже:
Еще нет:

В поле зрения:
