個人小型音樂網站,歌曲信息存儲於數據庫,用戶點擊歌曲列表項目,跳轉至播放器頁面並自動播放該曲目。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| HTML5 <audio> | 原生、零依賴、移動端友好、樣式可完全控制 | UI 需自行美化、舊版 IE 不支援 | 現代瀏覽器、輕量級項目、首選方案 |
| jQuery 插件 (jPlayer, MediaElement.js) | 統一 API、跨瀏覽器兼容、豐富皮膚、播放列表支援 | 引入額外 JS/CSS、維護成本 | 需複雜播放列表、皮膚、舊瀏覽器兼容 |
| Flash (已淘汰) | 曾經跨平台標準 | 瀏覽器已停用、安全風險 | 不推薦 |
CREATE TABLE Songs (
Id INT PRIMARY KEY IDENTITY,
Title NVARCHAR(200),
Artist NVARCHAR(100),
FilePath NVARCHAR(500), -- 相對路徑,如 /Music/2024/01/song.mp3
CoverPath NVARCHAR(500),
Duration INT -- 秒
);
// GET /api/songs/{id}
public IHttpActionResult GetSong(int id) {
var song = db.Songs.Find(id);
if (song == null) return NotFound();
return Ok(new {
title = song.Title,
artist = song.Artist,
url = ResolveUrl(song.FilePath), // 轉為絕對 URL
cover = ResolveUrl(song.CoverPath)
});
}
// 輔助:相對路徑轉絕對 URL
private string ResolveUrl(string relativePath) {
if (string.IsNullOrEmpty(relativePath)) return null;
var request = HttpContext.Current.Request;
return $"{request.Url.Scheme}://{request.Url.Authority}{VirtualPathUtility.ToAbsolute(relativePath)}";
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>音樂播放器</title>
<style>
.player { max-width: 400px; margin: 2rem auto; text-align: center; }
.player audio { width: 100%; }
.cover { max-width: 100%; border-radius: 8px; margin-bottom: 1rem; }
</style>
</head>
<body>
<div class="player">
<img id="cover" class="cover" src="" alt="封面" />
<h3 id="title"></h3>
<p id="artist"></p>
<audio id="audio" controls preload="metadata">
您的瀏覽器不支援 HTML5 Audio。
</audio>
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
<script>
$(function() {
// 從 URL 獲取歌曲 ID,如 player.html?id=123
var songId = new URLSearchParams(window.location.search).get('id');
if (!songId) return alert('缺少歌曲 ID');
$.get('/api/songs/' + songId, function(song) {
$('#title').text(song.title);
$('#artist').text(song.artist);
$('#cover').attr('src', song.cover);
var audio = $('#audio')[0];
audio.src = song.url;
audio.play().catch(e => console.log('自動播放被瀏覽器阻止', e));
}).fail(function() { alert('歌曲加載失敗'); });
});
</script>
</body>
</html>
// 列表頁 JS
$('.song-item').click(function() {
var id = $(this).data('id');
window.location.href = '/player.html?id=' + id;
});
~/Music/song.mp3 或 /Music/song.mp3),避免硬編碼域名/IP,利於遷移。VirtualPathUtility.ToAbsolute + 當前請求域名,生成 https://domain.com/Music/song.mp3。web.config 未阻擋 .mp3/.ogg 等 MIME 類型。audio.onended 觸發下一首。audio.ontimeupdate 顯示。Range 請求的靜態文件處理(IIS 默認支援)。對於個人小型音樂站,**HTML5 `