最简单的方法 - 使用 HTML5 <video>
这是在网页上嵌入视频最基本、最推荐的方法,它不需要任何 JavaScript,现代浏览器都原生支持。
(图片来源网络,侵删)
源代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">简单 MP4 播放器</title>
<style>
/* 简单的样式,让视频居中 */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
video {
max-width: 100%;
height: auto;
border: 1px solid #ccc;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<video src="your-video-file.mp4" controls width="800">
<!-- 如果浏览器不支持 video 标签,则显示此段文本 -->
您的浏览器不支持 HTML5 视频,请升级您的浏览器。
</video>
</body>
</html>
如何使用
- 将上面的代码保存为一个
.html 文件(simple-player.html)。
- 准备一个 MP4 视频文件,并将其放在与
.html 文件相同的目录下。
- 将代码中的
your-video-file.mp4 替换为你自己的视频文件名。
- 用浏览器打开这个
.html 文件即可。
代码解释
<video>: 这是 HTML5 中专门用于嵌入视频的标签。
src="your-video-file.mp4": 指定视频文件的路径,可以是相对路径(如上例)或绝对 URL(如 https://example.com/path/to/video.mp4)。
controls: 这是一个非常重要的属性,它告诉浏览器显示一套默认的播放控件,包括播放/暂停、进度条、音量、全屏等,没有它,视频将无法交互。
width="800": 设置视频显示区域的宽度(像素),高度会自动按比例调整。
<video> 标签内的文本:如果用户的浏览器太旧,不支持 <video> 标签,就会显示这段文本。
功能更丰富的自定义播放器
如果你想要一个自定义外观、添加额外功能(如自定义播放/暂停按钮、进度条、时间显示等),你就需要使用 JavaScript 来控制 <video> 元素。
源代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">自定义 MP4 播放器</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #333;
}
.player-container {
width: 800px;
background-color: #000;
box-shadow: 0 4px 15px rgba(0,0,0,0.5);
}
video {
width: 100%;
display: block; /* 移除视频下方的空隙 */
}
.controls {
background-color: #222;
padding: 10px;
display: flex;
align-items: center;
gap: 15px; /* 控件之间的间距 */
}
button {
background: none;
border: none;
color: white;
cursor: pointer;
font-size: 18px;
outline: none;
}
button:hover {
color: #007bff;
}
.progress-container {
flex-grow: 1; /* 占据剩余空间 */
height: 8px;
background-color: #444;
border-radius: 4px;
cursor: pointer;
position: relative;
}
.progress {
height: 100%;
background-color: #007bff;
border-radius: 4px;
width: 0%;
}
.time-display {
color: white;
font-size: 14px;
min-width: 100px;
text-align: right;
}
</style>
</head>
<body>
<div class="player-container">
<video id="myVideo">
<source src="your-video-file.mp4" type="video/mp4">
您的浏览器不支持 HTML5 视频。
</video>
<div class="controls">
<button id="playPauseBtn">▶️</button>
<div class="progress-container" id="progressContainer">
<div class="progress" id="progressBar"></div>
</div>
<div class="time-display" id="timeDisplay">00:00 / 00:00</div>
</div>
</div>
<script>
// 获取页面元素
const video = document.getElementById('myVideo');
const playPauseBtn = document.getElementById('playPauseBtn');
const progressBar = document.getElementById('progressBar');
const progressContainer = document.getElementById('progressContainer');
const timeDisplay = document.getElementById('timeDisplay');
// 1. 播放/暂停功能
function togglePlayPause() {
if (video.paused) {
video.play();
playPauseBtn.textContent = '⏸️'; // 暂停图标
} else {
video.pause();
playPauseBtn.textContent = '▶️'; // 播放图标
}
}
playPauseBtn.addEventListener('click', togglePlayPause);
// 2. 更新进度条
function updateProgressBar() {
// 计算进度百分比
const percentage = (video.currentTime / video.duration) * 100;
progressBar.style.width = percentage + '%';
// 更新时间显示
const currentMinutes = Math.floor(video.currentTime / 60);
const currentSeconds = Math.floor(video.currentTime % 60).toString().padStart(2, '0');
const durationMinutes = Math.floor(video.duration / 60);
const durationSeconds = Math.floor(video.duration % 60).toString().padStart(2, '0');
timeDisplay.textContent = `${currentMinutes}:${currentSeconds} / ${durationMinutes}:${durationSeconds}`;
}
video.addEventListener('timeupdate', updateProgressBar);
// 3. 点击进度条跳转
function setVideoPosition(e) {
// 计算点击位置相对于进度条总宽度的百分比
const clickPosition = (e.offsetX / progressContainer.offsetWidth);
video.currentTime = clickPosition * video.duration;
}
progressContainer.addEventListener('click', setVideoPosition);
// 4. 视频结束时重置按钮
video.addEventListener('ended', () => {
playPauseBtn.textContent = '▶️';
progressBar.style.width = '0%';
});
</script>
</body>
</html>
如何使用
与方案一类似,只需将代码保存为 .html 文件,并替换 your-video-file.mp4 为你的视频文件路径,然后用浏览器打开即可。
代码解释
-
HTML 结构:
- 我们为
<video> 元素添加了 id="myVideo",以便 JavaScript 可以轻松找到它。
- 创建了自定义的控件容器
.controls,里面包含播放/暂停按钮、进度条容器和时间显示。
<source> 标签是 <video> 的子标签,用于提供多种视频格式的备选方案,以提高兼容性。type 属性告诉浏览器文件的格式。
-
CSS 样式:
(图片来源网络,侵删)
- 使用 Flexbox 布局来排列控件,使其美观且对齐。
.progress-container 是一个灰色的背景条,代表总时长。
.progress 是蓝色的前景条,代表当前播放进度,其宽度会通过 JavaScript 动态改变。
-
JavaScript 逻辑:
- 获取元素:
document.getElementById() 用于获取 HTML 中定义的元素。
- 播放/暂停 (
togglePlayPause): 通过检查 video.paused 属性来判断视频状态,并调用 video.play() 或 video.pause() 方法来控制播放,同时更新按钮图标。
- 更新进度 (
updateProgressBar): timeupdate 事件在视频播放的每一帧都会触发,在这个事件中,我们根据 video.currentTime (当前播放时间) 和 video.duration (总时长) 计算进度百分比,并更新进度条的宽度 style.width,同时格式化并显示时间。
- 点击跳转 (
setVideoPosition): 为进度条容器添加 click 事件,通过计算点击位置 (e.offsetX) 在容器总宽度 (offsetWidth) 中的比例,来设置 video.currentTime,实现视频跳转。
- 视频结束事件:
ended 事件在视频播放完毕后触发,我们用它来重置播放按钮和进度条。
使用成熟的 JavaScript 库(推荐用于生产环境)
对于商业项目,直接编写和维护一个播放器非常耗时,且需要处理各种边缘情况和兼容性问题,使用成熟的库是更高效、更可靠的选择。
强烈推荐:Video.js
它是一个功能强大、高度可定制、跨浏览器兼容的开源视频播放器。
(图片来源网络,侵删)
源代码 (使用 Video.js)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">使用 Video.js 的播放器</title>
<!-- 1. 引入 Video.js 的 CSS -->
<link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet">
<!-- 2. 自定义样式(可选) -->
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #222;
}
.video-js {
width: 800px;
height: 450px; /* 保持 16:9 的宽高比 */
}
</style>
</head>
<body>
<!-- 3. 创建 video 标签,并加上 video-js 类和一些属性 -->
<video
id="myVideoPlayer"
class="video-js vjs-default-skin"
controls
preload="auto"
width="800"
height="450"
data-setup="{}">
<source src="your-video-file.mp4" type="video/mp4">
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>.
</p>
</video>
<!-- 4. 引入 Video.js 的 JavaScript -->
<script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
</body>
</html>
如何使用
- 将代码保存为
.html 文件。
- 替换
your-video-file.mp4。
- 用浏览器打开。
优点
- 开箱即用: 功能齐全,无需编写 JS 代码。
- 高度可定制: 提供丰富的 API 和插件,可以轻松修改皮肤、添加插件(如广告、画中画、字幕等)。
- 兼容性好: 内部处理了各种浏览器的兼容性问题。
- 响应式: 默认支持响应式布局。
- 社区活跃: 文档完善,遇到问题容易找到解决方案。
总结与建议
方案
优点
缺点
适用场景
方案一: HTML5 <video>
最简单、最原生、性能最好
外观和功能由浏览器决定,无法自定义
个人博客、简单展示、快速原型
方案二: 自定义 JS 播放器
完全控制外观和功能
开发和维护成本高,需要处理兼容性和细节
学习 JavaScript、项目有特殊 UI/UX 要求
方案三: JS 库 (Video.js)
功能强大、稳定、可扩展、省时省力
引入了外部依赖,文件体积稍大
绝大多数商业项目和复杂应用的首选
对于初学者或快速实现,方案一是最好的起点,如果你想深入学习前端,方案二是绝佳的练习项目,对于任何严肃的开发工作,强烈建议使用方案三,它能让你专注于业务逻辑,而不是重复造轮子。
这是在网页上嵌入视频最基本、最推荐的方法,它不需要任何 JavaScript,现代浏览器都原生支持。

(图片来源网络,侵删)
源代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">简单 MP4 播放器</title>
<style>
/* 简单的样式,让视频居中 */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
video {
max-width: 100%;
height: auto;
border: 1px solid #ccc;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<video src="your-video-file.mp4" controls width="800">
<!-- 如果浏览器不支持 video 标签,则显示此段文本 -->
您的浏览器不支持 HTML5 视频,请升级您的浏览器。
</video>
</body>
</html>
如何使用
- 将上面的代码保存为一个
.html文件(simple-player.html)。 - 准备一个 MP4 视频文件,并将其放在与
.html文件相同的目录下。 - 将代码中的
your-video-file.mp4替换为你自己的视频文件名。 - 用浏览器打开这个
.html文件即可。
代码解释
<video>: 这是 HTML5 中专门用于嵌入视频的标签。src="your-video-file.mp4": 指定视频文件的路径,可以是相对路径(如上例)或绝对 URL(如https://example.com/path/to/video.mp4)。controls: 这是一个非常重要的属性,它告诉浏览器显示一套默认的播放控件,包括播放/暂停、进度条、音量、全屏等,没有它,视频将无法交互。width="800": 设置视频显示区域的宽度(像素),高度会自动按比例调整。<video>标签内的文本:如果用户的浏览器太旧,不支持<video>标签,就会显示这段文本。
功能更丰富的自定义播放器
如果你想要一个自定义外观、添加额外功能(如自定义播放/暂停按钮、进度条、时间显示等),你就需要使用 JavaScript 来控制 <video> 元素。
源代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">自定义 MP4 播放器</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #333;
}
.player-container {
width: 800px;
background-color: #000;
box-shadow: 0 4px 15px rgba(0,0,0,0.5);
}
video {
width: 100%;
display: block; /* 移除视频下方的空隙 */
}
.controls {
background-color: #222;
padding: 10px;
display: flex;
align-items: center;
gap: 15px; /* 控件之间的间距 */
}
button {
background: none;
border: none;
color: white;
cursor: pointer;
font-size: 18px;
outline: none;
}
button:hover {
color: #007bff;
}
.progress-container {
flex-grow: 1; /* 占据剩余空间 */
height: 8px;
background-color: #444;
border-radius: 4px;
cursor: pointer;
position: relative;
}
.progress {
height: 100%;
background-color: #007bff;
border-radius: 4px;
width: 0%;
}
.time-display {
color: white;
font-size: 14px;
min-width: 100px;
text-align: right;
}
</style>
</head>
<body>
<div class="player-container">
<video id="myVideo">
<source src="your-video-file.mp4" type="video/mp4">
您的浏览器不支持 HTML5 视频。
</video>
<div class="controls">
<button id="playPauseBtn">▶️</button>
<div class="progress-container" id="progressContainer">
<div class="progress" id="progressBar"></div>
</div>
<div class="time-display" id="timeDisplay">00:00 / 00:00</div>
</div>
</div>
<script>
// 获取页面元素
const video = document.getElementById('myVideo');
const playPauseBtn = document.getElementById('playPauseBtn');
const progressBar = document.getElementById('progressBar');
const progressContainer = document.getElementById('progressContainer');
const timeDisplay = document.getElementById('timeDisplay');
// 1. 播放/暂停功能
function togglePlayPause() {
if (video.paused) {
video.play();
playPauseBtn.textContent = '⏸️'; // 暂停图标
} else {
video.pause();
playPauseBtn.textContent = '▶️'; // 播放图标
}
}
playPauseBtn.addEventListener('click', togglePlayPause);
// 2. 更新进度条
function updateProgressBar() {
// 计算进度百分比
const percentage = (video.currentTime / video.duration) * 100;
progressBar.style.width = percentage + '%';
// 更新时间显示
const currentMinutes = Math.floor(video.currentTime / 60);
const currentSeconds = Math.floor(video.currentTime % 60).toString().padStart(2, '0');
const durationMinutes = Math.floor(video.duration / 60);
const durationSeconds = Math.floor(video.duration % 60).toString().padStart(2, '0');
timeDisplay.textContent = `${currentMinutes}:${currentSeconds} / ${durationMinutes}:${durationSeconds}`;
}
video.addEventListener('timeupdate', updateProgressBar);
// 3. 点击进度条跳转
function setVideoPosition(e) {
// 计算点击位置相对于进度条总宽度的百分比
const clickPosition = (e.offsetX / progressContainer.offsetWidth);
video.currentTime = clickPosition * video.duration;
}
progressContainer.addEventListener('click', setVideoPosition);
// 4. 视频结束时重置按钮
video.addEventListener('ended', () => {
playPauseBtn.textContent = '▶️';
progressBar.style.width = '0%';
});
</script>
</body>
</html>
如何使用
与方案一类似,只需将代码保存为 .html 文件,并替换 your-video-file.mp4 为你的视频文件路径,然后用浏览器打开即可。
代码解释
-
HTML 结构:
- 我们为
<video>元素添加了id="myVideo",以便 JavaScript 可以轻松找到它。 - 创建了自定义的控件容器
.controls,里面包含播放/暂停按钮、进度条容器和时间显示。 <source>标签是<video>的子标签,用于提供多种视频格式的备选方案,以提高兼容性。type属性告诉浏览器文件的格式。
- 我们为
-
CSS 样式:
(图片来源网络,侵删)- 使用 Flexbox 布局来排列控件,使其美观且对齐。
.progress-container是一个灰色的背景条,代表总时长。.progress是蓝色的前景条,代表当前播放进度,其宽度会通过 JavaScript 动态改变。
-
JavaScript 逻辑:
- 获取元素:
document.getElementById()用于获取 HTML 中定义的元素。 - 播放/暂停 (
togglePlayPause): 通过检查video.paused属性来判断视频状态,并调用video.play()或video.pause()方法来控制播放,同时更新按钮图标。 - 更新进度 (
updateProgressBar):timeupdate事件在视频播放的每一帧都会触发,在这个事件中,我们根据video.currentTime(当前播放时间) 和video.duration(总时长) 计算进度百分比,并更新进度条的宽度style.width,同时格式化并显示时间。 - 点击跳转 (
setVideoPosition): 为进度条容器添加click事件,通过计算点击位置 (e.offsetX) 在容器总宽度 (offsetWidth) 中的比例,来设置video.currentTime,实现视频跳转。 - 视频结束事件:
ended事件在视频播放完毕后触发,我们用它来重置播放按钮和进度条。
- 获取元素:
使用成熟的 JavaScript 库(推荐用于生产环境)
对于商业项目,直接编写和维护一个播放器非常耗时,且需要处理各种边缘情况和兼容性问题,使用成熟的库是更高效、更可靠的选择。
强烈推荐:Video.js
它是一个功能强大、高度可定制、跨浏览器兼容的开源视频播放器。

(图片来源网络,侵删)
源代码 (使用 Video.js)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">使用 Video.js 的播放器</title>
<!-- 1. 引入 Video.js 的 CSS -->
<link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet">
<!-- 2. 自定义样式(可选) -->
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #222;
}
.video-js {
width: 800px;
height: 450px; /* 保持 16:9 的宽高比 */
}
</style>
</head>
<body>
<!-- 3. 创建 video 标签,并加上 video-js 类和一些属性 -->
<video
id="myVideoPlayer"
class="video-js vjs-default-skin"
controls
preload="auto"
width="800"
height="450"
data-setup="{}">
<source src="your-video-file.mp4" type="video/mp4">
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>.
</p>
</video>
<!-- 4. 引入 Video.js 的 JavaScript -->
<script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
</body>
</html>
如何使用
- 将代码保存为
.html文件。 - 替换
your-video-file.mp4。 - 用浏览器打开。
优点
- 开箱即用: 功能齐全,无需编写 JS 代码。
- 高度可定制: 提供丰富的 API 和插件,可以轻松修改皮肤、添加插件(如广告、画中画、字幕等)。
- 兼容性好: 内部处理了各种浏览器的兼容性问题。
- 响应式: 默认支持响应式布局。
- 社区活跃: 文档完善,遇到问题容易找到解决方案。
总结与建议
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
方案一: HTML5 <video> |
最简单、最原生、性能最好 | 外观和功能由浏览器决定,无法自定义 | 个人博客、简单展示、快速原型 |
| 方案二: 自定义 JS 播放器 | 完全控制外观和功能 | 开发和维护成本高,需要处理兼容性和细节 | 学习 JavaScript、项目有特殊 UI/UX 要求 |
| 方案三: JS 库 (Video.js) | 功能强大、稳定、可扩展、省时省力 | 引入了外部依赖,文件体积稍大 | 绝大多数商业项目和复杂应用的首选 |
对于初学者或快速实现,方案一是最好的起点,如果你想深入学习前端,方案二是绝佳的练习项目,对于任何严肃的开发工作,强烈建议使用方案三,它能让你专注于业务逻辑,而不是重复造轮子。
