Bootstrap

html脚本:基本的.mp3文件播放器

1 基本骨架​​​​​​​

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>.mp3播放器</title>
</head>
<body>
    <div>
        <input type="file" id="fileInput" accept="audio/mp3">
        <audio id="audioPlayer" controls></audio>
    </div>

    <script>
        const fileInput = document.getElementById('fileInput');
        const audioPlayer = document.getElementById('audioPlayer');

        fileInput.addEventListener('change', (event) => {
            const file = event.target.files[0];
            if (file) {
                const url = URL.createObjectURL(file);
                audioPlayer.src = url;
            }
        });
    </script>
</body>
</html>

2 完整版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>.mp3播放器</title>
    <style>
        :root {
            --theme-color: #163;
            --light-gray: #eee;
            --white: #fff;
            --black: #000;
        }

        body {
            font-family: Arial, sans-serif;
            background-color: var(--white);
            color: var(--black);
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            padding: 20px;
            overflow: hidden;
        }

        .player-container {
            background-color: var(--light-gray);
            padding: 40px;
            border-radius: 15px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
            text-align: center;
            width: 80%;
            max-width: 600px;
        }

        .player-container h1 {
            margin-bottom: 30px;
            font-size: 2em;
        }

        .player-container audio {
            width: 100%;
            margin-bottom: 30px;
        }

        .player-container button, .player-container input[type="file"] {
            background-color: var(--theme-color);
            color: var(--white);
            border: 1px solid var(--white);
            padding: 15px 0;
            border-radius: 10px;
            cursor: pointer;
            margin: 10px;
            font-size: 1em;
            width: calc(100% - 20px);
            text-align: center;
        }

        .player-container input[type="file"] {
            background-color: var(--white);
            color: var(--theme-color);
            border: 1px solid var(--theme-color);
        }

        .player-container button:hover, .player-container input[type="file"]:hover {
            background-color: var(--light-gray);
            border-color: var(--theme-color);
        }

        .player-container input[type="range"] {
            width: 100%;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="player-container">
        <h1>.mp3播放器</h1>
        <input type="file" id="fileInput" accept="audio/mp3">
        <audio id="audioPlayer"></audio>
        <button id="playPauseButton">播放</button>
        <input type="range" id="seekSlider" min="0" max="100" value="0">
    </div>

    <script>
        const audioPlayer = document.getElementById('audioPlayer');
        const fileInput = document.getElementById('fileInput');
        const playPauseButton = document.getElementById('playPauseButton');
        const seekSlider = document.getElementById('seekSlider');

        fileInput.addEventListener('change', (event) => {
            const file = event.target.files[0];
            if (file) {
                const url = URL.createObjectURL(file);
                audioPlayer.src = url;
            }
        });

        playPauseButton.addEventListener('click', () => {
            if (audioPlayer.paused) {
                audioPlayer.play();
                playPauseButton.textContent = '暂停';
            } else {
                audioPlayer.pause();
                playPauseButton.textContent = '播放';
            }
        });

        audioPlayer.addEventListener('timeupdate', () => {
            const value = (100 / audioPlayer.duration) * audioPlayer.currentTime;
            seekSlider.value = value;
        });

        seekSlider.addEventListener('input', () => {
            const value = (seekSlider.value * audioPlayer.duration) / 100;
            audioPlayer.currentTime = value;
        });
    </script>
</body>
</html>

3 分开写版

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>.mp3播放器</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="player-container">
        <h1>.mp3播放器</h1>
        <input type="file" id="fileInput" accept="audio/mp3">
        <audio id="audioPlayer">
            Your browser does not support the audio element.
        </audio>
        <button id="playPauseButton">播放</button>
        <input type="range" id="seekSlider" min="0" max="100" value="0">
    </div>
    <script src="script.js"></script>
</body>
</html>

css

:root {
    --theme-color: #163;
    --light-gray: #eee;
    --white: #fff;
    --black: #000;
}

body {
    font-family: Arial, sans-serif;
    background-color: var(--white);
    color: var(--black);
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    padding: 20px;
    overflow: hidden;
}

.player-container {
    background-color: var(--light-gray);
    padding: 40px;
    border-radius: 15px;
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
    text-align: center;
    width: 80%;
    max-width: 600px;
}

.player-container h1 {
    margin-bottom: 30px;
    font-size: 2em;
}

.player-container audio {
    width: 100%;
    margin-bottom: 30px;
}

.player-container button, .player-container input[type="file"] {
    background-color: var(--theme-color);
    color: var(--white);
    border: 1px solid var(--white);
    padding: 15px 0;
    border-radius: 10px;
    cursor: pointer;
    margin: 10px;
    font-size: 1em;
    width: calc(100% - 20px);
    text-align: center;
}

.player-container input[type="file"] {
    background-color: var(--white);
    color: var(--theme-color);
    border: 1px solid var(--theme-color);
}

.player-container button:hover, .player-container input[type="file"]:hover {
    background-color: var(--light-gray);
    border-color: var(--theme-color);
}

.player-container input[type="range"] {
    width: 100%;
    margin: 10px 0;
}

js

const audioPlayer = document.getElementById('audioPlayer');
const fileInput = document.getElementById('fileInput');
const playPauseButton = document.getElementById('playPauseButton');
const seekSlider = document.getElementById('seekSlider');

fileInput.addEventListener('change', (event) => {
    const file = event.target.files[0];
    if (file) {
        const url = URL.createObjectURL(file);
        audioPlayer.src = url;
    }
});

playPauseButton.addEventListener('click', () => {
    if (audioPlayer.paused) {
        audioPlayer.play();
        playPauseButton.textContent = '暂停';
    } else {
        audioPlayer.pause();
        playPauseButton.textContent = '播放';
    }
});

audioPlayer.addEventListener('timeupdate', () => {
    const value = (100 / audioPlayer.duration) * audioPlayer.currentTime;
    seekSlider.value = value;
});

seekSlider.addEventListener('input', () => {
    const value = (seekSlider.value * audioPlayer.duration) / 100;
    audioPlayer.currentTime = value;
});

;