当前位置:首页 > JavaScript

js实现切换视频

2026-01-30 23:17:48JavaScript

使用HTML5 video标签切换视频源

在HTML中嵌入video标签,通过JavaScript动态修改src属性来切换视频

<video id="myVideo" width="640" height="360" controls>
  <source src="video1.mp4" type="video/mp4">
</video>

<button onclick="changeVideo('video2.mp4')">切换视频</button>
function changeVideo(newVideoSrc) {
  const video = document.getElementById('myVideo');
  video.src = newVideoSrc;
  video.load();
  video.play();
}

使用数组管理多个视频源

创建一个视频源数组,通过索引切换不同视频

const videoSources = [
  'video1.mp4',
  'video2.mp4',
  'video3.mp4'
];
let currentIndex = 0;

function switchVideo() {
  currentIndex = (currentIndex + 1) % videoSources.length;
  document.getElementById('myVideo').src = videoSources[currentIndex];
  document.getElementById('myVideo').load();
  document.getElementById('myVideo').play();
}

添加过渡效果

在切换视频时添加淡入淡出效果增强用户体验

#myVideo {
  transition: opacity 0.5s ease-in-out;
}

.fade-out {
  opacity: 0;
}
function changeVideoWithFade(newSrc) {
  const video = document.getElementById('myVideo');

  video.classList.add('fade-out');

  setTimeout(() => {
    video.src = newSrc;
    video.load();
    video.oncanplay = function() {
      video.classList.remove('fade-out');
      video.play();
    };
  }, 500);
}

使用MediaSource Extensions API

对于需要拼接或动态生成的视频流,可以使用更高级的MediaSource API

const video = document.getElementById('myVideo');
const mediaSource = new MediaSource();

video.src = URL.createObjectURL(mediaSource);

mediaSource.addEventListener('sourceopen', function() {
  const sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');

  fetch('video1.mp4')
    .then(response => response.arrayBuffer())
    .then(data => {
      sourceBuffer.appendBuffer(data);
    });
});

function switchVideoWithMSE(newVideoUrl) {
  const sourceBuffer = mediaSource.sourceBuffers[0];

  fetch(newVideoUrl)
    .then(response => response.arrayBuffer())
    .then(data => {
      sourceBuffer.appendBuffer(data);
    });
}

处理视频预加载

提前加载视频以减少切换时的缓冲时间

const videoCache = {};

function preloadVideos(videoUrls) {
  videoUrls.forEach(url => {
    fetch(url)
      .then(response => response.blob())
      .then(blob => {
        videoCache[url] = URL.createObjectURL(blob);
      });
  });
}

function playPreloadedVideo(url) {
  const video = document.getElementById('myVideo');
  video.src = videoCache[url];
  video.play();
}

响应式视频切换

根据屏幕尺寸切换不同分辨率的视频

js实现切换视频

function getOptimalVideoSource() {
  const screenWidth = window.innerWidth;
  let videoSrc;

  if (screenWidth >= 1920) {
    videoSrc = 'video-4k.mp4';
  } else if (screenWidth >= 1280) {
    videoSrc = 'video-hd.mp4';
  } else {
    videoSrc = 'video-sd.mp4';
  }

  return videoSrc;
}

window.addEventListener('resize', function() {
  const optimalSrc = getOptimalVideoSource();
  if (document.getElementById('myVideo').src !== optimalSrc) {
    changeVideo(optimalSrc);
  }
});

标签: 视频js
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…