HTML5 原生支持多媒体内容,无需插件即可在网页中嵌入视频和音频。
<video><video src="movie.mp4" controls>
您的浏览器不支持 HTML5 视频标签。
</video>
<video
src="video.mp4"
width="640"
height="360"
controls
autoplay
muted
loop
poster="poster.jpg"
preload="metadata">
您的浏览器不支持 HTML5 视频标签。
</video>
<video controls width="640" height="360" poster="preview.jpg">
<source src="video.webm" type="video/webm">
<source src="video.mp4" type="video/mp4">
<source src="video.ogv" type="video/ogg">
<track src="subtitles-zh.vtt" kind="subtitles" srclang="zh" label="中文">
<track src="subtitles-en.vtt" kind="subtitles" srclang="en" label="English">
您的浏览器不支持 HTML5 视频标签。
请 <a href="video.mp4">下载视频</a>。
</video>
<audio><audio src="audio.mp3" controls>
您的浏览器不支持 HTML5 音频标签。
</audio>
<audio
controls
autoplay
muted
loop
preload="metadata">
<source src="audio.mp3" type="audio/mpeg">
<source src="audio.ogg" type="audio/ogg">
<source src="audio.wav" type="audio/wav">
您的浏览器不支持 HTML5 音频标签。
</audio>
同视频通用属性。无特殊属性
<video id="myVideo" src="video.mp4" width="640" height="360"></video>
<div>
<button onclick="playVideo()">播放</button>
<button onclick="pauseVideo()">暂停</button>
<button onclick="toggleMute()">静音/取消静音</button>
<button onclick="toggleFullscreen()">全屏</button>
<input type="range" id="volume" min="0" max="1" step="0.1" value="1" onchange="setVolume(this.value)">
</div>
<script>
const video = document.getElementById('myVideo');
function playVideo() {
video.play();
}
function pauseVideo() {
video.pause();
}
function toggleMute() {
video.muted = !video.muted;
}
function setVolume(volume) {
video.volume = volume;
}
function toggleFullscreen() {
if (!document.fullscreenElement) {
video.requestFullscreen();
} else {
document.exitFullscreen();
}
}
</script>
<video id="eventVideo" src="video.mp4" controls></video>
<div id="status">状态: 等待播放</div>
<script>
const video = document.getElementById('eventVideo');
const status = document.getElementById('status');
video.addEventListener('loadstart', () => {
status.textContent = '状态: 开始加载';
});
video.addEventListener('canplay', () => {
status.textContent = '状态: 可以播放';
});
video.addEventListener('play', () => {
status.textContent = '状态: 播放中';
});
video.addEventListener('pause', () => {
status.textContent = '状态: 已暂停';
});
video.addEventListener('ended', () => {
status.textContent = '状态: 播放结束';
});
video.addEventListener('error', (e) => {
status.textContent = '状态: 加载错误';
});
</script>
<video id="progressVideo" src="video.mp4" controls></video>
<div>
<progress id="progressBar" value="0" max="100">0%</progress>
<span id="timeDisplay">0:00 / 0:00</span>
</div>
<script>
const video = document.getElementById('progressVideo');
const progressBar = document.getElementById('progressBar');
const timeDisplay = document.getElementById('timeDisplay');
video.addEventListener('timeupdate', () => {
const percent = (video.currentTime / video.duration) * 100;
progressBar.value = percent;
const current = formatTime(video.currentTime);
const total = formatTime(video.duration);
timeDisplay.textContent = `${current} / ${total}`;
});
function formatTime(seconds) {
const min = Math.floor(seconds / 60);
const sec = Math.floor(seconds % 60);
return `${min}:${sec.toString().padStart(2, '0')}`;
}
</script>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>自定义视频播放器</title>
<style>
.video-container {
max-width: 800px;
margin: 20px auto;
position: relative;
}
video {
width: 100%;
background: #000;
}
.controls {
background: rgba(0,0,0,0.7);
padding: 10px;
display: flex;
align-items: center;
gap: 10px;
}
button {
background: #ff5722;
color: white;
border: none;
padding: 5px 10px;
border-radius: 3px;
cursor: pointer;
}
.progress-container {
flex: 1;
background: #555;
height: 5px;
border-radius: 2px;
cursor: pointer;
position: relative;
}
.progress-bar {
background: #ff5722;
height: 100%;
border-radius: 2px;
width: 0%;
}
.time {
color: white;
font-size: 12px;
min-width: 100px;
}
</style>
</head>
<body>
<div class="video-container">
<video id="customVideo" poster="poster.jpg">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
您的浏览器不支持 HTML5 视频。
</video>
<div class="controls">
<button id="playBtn">播放</button>
<button id="muteBtn">静音</button>
<div class="progress-container" id="progressContainer">
<div class="progress-bar" id="progressBar"></div>
</div>
<span class="time" id="timeDisplay">0:00 / 0:00</span>
<button id="fullscreenBtn">全屏</button>
</div>
</div>
<script>
const video = document.getElementById('customVideo');
const playBtn = document.getElementById('playBtn');
const muteBtn = document.getElementById('muteBtn');
const progressBar = document.getElementById('progressBar');
const progressContainer = document.getElementById('progressContainer');
const timeDisplay = document.getElementById('timeDisplay');
const fullscreenBtn = document.getElementById('fullscreenBtn');
// 播放/暂停
playBtn.addEventListener('click', () => {
if (video.paused) {
video.play();
playBtn.textContent = '暂停';
} else {
video.pause();
playBtn.textContent = '播放';
}
});
// 静音/取消静音
muteBtn.addEventListener('click', () => {
video.muted = !video.muted;
muteBtn.textContent = video.muted ? '取消静音' : '静音';
});
// 更新进度条
video.addEventListener('timeupdate', () => {
const percent = (video.currentTime / video.duration) * 100;
progressBar.style.width = percent + '%';
timeDisplay.textContent =
formatTime(video.currentTime) + ' / ' +
formatTime(video.duration);
});
// 点击进度条跳转
progressContainer.addEventListener('click', (e) => {
const rect = progressContainer.getBoundingClientRect();
const percent = (e.clientX - rect.left) / rect.width;
video.currentTime = percent * video.duration;
});
// 全屏
fullscreenBtn.addEventListener('click', () => {
if (!document.fullscreenElement) {
video.requestFullscreen();
} else {
document.exitFullscreen();
}
});
// 格式化时间
function formatTime(seconds) {
const min = Math.floor(seconds / 60);
const sec = Math.floor(seconds % 60);
return `${min}:${sec.toString().padStart(2, '0')}`;
}
// 视频结束时重置
video.addEventListener('ended', () => {
playBtn.textContent = '播放';
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>音乐播放器</title>
<style>
.playlist {
max-width: 600px;
margin: 20px auto;
}
.track {
display: flex;
align-items: center;
padding: 10px;
border-bottom: 1px solid #eee;
cursor: pointer;
}
.track:hover {
background: #f5f5f5;
}
.track.active {
background: #e3f2fd;
}
.play-btn {
margin-right: 10px;
background: none;
border: none;
font-size: 16px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="playlist">
<h2>我的播放列表</h2>
<audio id="audioPlayer"></audio>
<div class="track" data-src="song1.mp3">
<button class="play-btn">▶</button>
<span>歌曲一 - 艺术家一</span>
</div>
<div class="track" data-src="song2.mp3">
<button class="play-btn">▶</button>
<span>歌曲二 - 艺术家二</span>
</div>
<div class="track" data-src="song3.mp3">
<button class="play-btn">▶</button>
<span>歌曲三 - 艺术家三</span>
</div>
</div>
<script>
const audioPlayer = document.getElementById('audioPlayer');
const tracks = document.querySelectorAll('.track');
let currentTrack = null;
tracks.forEach(track => {
track.addEventListener('click', () => {
const src = track.getAttribute('data-src');
// 如果点击的是当前正在播放的歌曲,暂停
if (currentTrack === track && !audioPlayer.paused) {
audioPlayer.pause();
track.querySelector('.play-btn').textContent = '▶';
return;
}
// 移除其他歌曲的激活状态
tracks.forEach(t => {
t.classList.remove('active');
t.querySelector('.play-btn').textContent = '▶';
});
// 设置当前歌曲
track.classList.add('active');
audioPlayer.src = src;
audioPlayer.play();
track.querySelector('.play-btn').textContent = '❚❚';
currentTrack = track;
});
});
// 歌曲结束时重置
audioPlayer.addEventListener('ended', () => {
if (currentTrack) {
currentTrack.querySelector('.play-btn').textContent = '▶';
currentTrack.classList.remove('active');
}
});
</script>
</body>
</html>