video视频如何实现在视窗内自动播放,视窗外自动关闭

是这样的,最近写了个刷视频的网页(手机端),但是遇到了两个问题:1.视频如何实现滑入视窗内自动播放,滑入视窗外自动关闭2.如上,视频滑入视窗内自动播放的同时预加载下面的两个视频,这两个难题难到我了,想请教请教各位,下面附上网页演示图

img

img

方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


实现视频滑入视窗内自动播放,滑入视窗外自动关闭,可以使用 Intersection Observer API。这个 API 可以监测元素是否进入或离开视窗。当视频进入视窗时,可以触发播放事件,离开视窗时可以暂停视频或关闭视频。以下是一个示例代码:

const options = {
  root: null,
  rootMargin: '0px',
  threshold: 0.5
};

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.play();
    } else {
      entry.target.pause();
    }
  });
}, options);

const video = document.querySelector('#my-video');
observer.observe(video);

实现视频滑入视窗内自动播放的同时预加载下面的两个视频,可以使用 preload 属性。preload 属性可以在视频开始播放前加载视频。可以通过 JavaScript 控制 preload 属性来预加载下面的两个视频。以下是一个示例代码:

const video1 = document.querySelector('#video1');
const video2 = document.querySelector('#video2');
const video3 = document.querySelector('#video3');

video1.preload = 'auto';
video2.preload = 'auto';
video3.preload = 'auto';

解决方案:

1.视频自动播放

使用javascript实现:

// 获取视频元素
var myVideo = document.getElementById('myVideo');

// 监听window的scroll事件
window.onscroll = function(){
    // 获取视频所在视窗的位置
    var top = myVideo.getBoundingClientRect().top;
    
    // 如果视频出现在视窗内,就播放视频
    if(top <= window.innerHeight){
        myVideo.play();
    }
    // 如果视频不出现在视窗内,就暂停视频
    else{
        myVideo.pause();
    }
}
2.视频自动预加载

使用javascript实现:

// 获取视频元素
var myVideo = document.getElementById('myVideo');

// 监听window的scroll事件
window.onscroll = function(){
    // 获取视频所在视窗的位置
    var top = myVideo.getBoundingClientRect().top;
    
    // 如果视频出现在视窗内,就播放视频和预加载下面的两个视频
    if(top <= window.innerHeight){
        myVideo.play();
        preLoadVideo1();
        preLoadVideo2();
    }
    // 如果视频不出现在视窗内,就暂停视频
    else{
        myVideo.pause();
    }
}

// 预加载下个视频
function preLoadVideo1(){
    var video1 = document.getElementById('video1');
    video1.src = 'url of the video1';
}

// 预加载下下个视频
function preLoadVideo2(){
    var video2 = document.getElementById('video2');
    video2.src = 'url of the video2';
}




可以通过swiper上下滑动监听变化然后实现自动播放,可参考文章:
https://www.cnblogs.com/liuyjui/p/13403286.html
https://blog.csdn.net/cp3___/article/details/102818129

回答不易,求求您采纳点赞哦 感激不尽

1、视频如何实现滑入视窗内自动播放,滑入视窗外自动关闭
可以通过监听浏览器窗口的滚动事件,判断视频是否进入视窗,从而控制视频的播放和暂停。以下是示例代码:

// 获取视频元素
const video = document.getElementById('my-video');

// 监听窗口滚动事件
window.addEventListener('scroll', function() {
  // 获取视频元素相对于视窗的位置
  const rect = video.getBoundingClientRect();

  // 如果视频进入视窗,则播放视频,否则暂停视频
  if (rect.top >= 0 && rect.bottom <= window.innerHeight) {
    video.play();
  } else {
    video.pause();
  }
});

2、视频滑入视窗内自动播放的同时预加载下面的两个视频
可以使用 JavaScript 中的 preload 方法预加载视频,以提前缓存视频资源。以下是示例代码:

// 获取视频元素
const video = document.getElementById('my-video');

// 预加载下一个视频
const nextVideo = new Video();
nextVideo.src = 'next-video.mp4';
nextVideo.preload = 'auto';

// 监听视频播放结束事件,切换到下一个视频
video.addEventListener('ended', function() {
  video.pause();
  nextVideo.play();
  video = nextVideo;

  // 预加载下下一个视频
  const nextNextVideo = new Video();
  nextNextVideo.src = 'next-next-video.mp4';
  nextNextVideo.preload = 'auto';
});

在播放当前视频时,通过预加载下一个视频和监听视频播放结束事件,切换到下一个视频并预加载下下一个视频,以达到连续播放多个视频的效果。需要注意的是,预加载视频可能会消耗一定的带宽和资源,建议在必要的时候使用。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^