当前位置:首页 > 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();
}

使用数组管理多个视频源

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

js实现切换视频

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

js实现切换视频

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();
}

响应式视频切换

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

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 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

js防抖和节流实现

js防抖和节流实现

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

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

h5 实现视频通话

h5 实现视频通话

H5 实现视频通话的技术方案 H5(HTML5)实现视频通话主要依赖WebRTC(Web Real-Time Communication)技术。以下是实现步骤和关键代码示例: 获取用户媒体设备权限…

js实现选题

js实现选题

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

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…