HTML オーディオ オブジェクトのプロパティ、メソッド、イベント、および音楽プレーヤー アプリケーション

2 つの部分に分かれており、前部では主に Html5 が Audio オブジェクトの DOM 操作のためのメソッド、プロパティ、イベントを提供していることを紹介します。

音楽プレーヤーは主に、audio jquery ブートストラップを使用してブラウザの下部に実装されます。

効果:

目次

オーディオオブジェクト

一般的な方法

共通の属性

よくある出来事

音楽プレーヤー

HTMLページ

スタイルファイル

スクリプトファイル

サーバ

要約する


オーディオオブジェクト

一般的な方法

方法

説明する

負荷()

メディア ファイルをロードし、再生の準備をします。通常は再生前のプリロードに使用されますが、メディア ファイルのリロードにも使用されます。

遊ぶ()

メディア ファイルを再生します。オーディオがロードされていない場合はロードして再生され、オーディオが一時停止されている場合は再生に変わります。

一時停止()

メディア ファイルの再生を一時停止します。

canPlayType()

ブラウザが指定されたメディア タイプをサポートしているかどうかをテストします。

共通の属性

属性

説明する

現在のソース

現在のオーディオの URL を返します。

現在の時刻

オーディオ内の現在の再生位置を設定または返します (秒)

間隔

オーディオの長さを秒単位で返します。

終了しました

オーディオの再生が終了したかどうかを返します。

エラー

オーディオ エラー状態を表す MediaError を排他的に返します。

一時停止した

オーディオを一時停止するかどうかを設定または返します

ミュートされた

音を消すかどうかを設定または戻します

音量

オーディオの音量を設定または戻します

自動再生

ブール値。このプロパティを宣言すると、オーディオ ファイル全体がダウンロードされるのを待たずに、オーディオができるだけ早く自動的に再生されます。

コントロール

この属性が宣言されている場合、ブラウザはサウンド、再生の進行状況、再生の一時停止を含むコントロール パネルを提供し、ユーザーがオーディオの再生を制御できるようにします。

ループ

ブール値。宣言されている場合、オーディオはループします。

よくある出来事

イベント

説明する

遊ぶ

play() メソッドが実行されるとトリガーされます

遊んでいる

プレイ中に発砲

一時停止

メソッドpause()が実行されるとトリガーされます

時間更新

再生位置が変更されたときにトリガーされます

終了しました

再生完了後に再生が停止されるとトリガーされます

待っている

次のフレームがロードされるのを待っているときに発生します

レートチェンジ

現在の再生レートが変化するとトリガーされます

音量変化

音量が変化するとトリガーされます

遊べる

現在の再生レートでバッファリングが必要な場合にトリガーされます

プレイスルーできる

現在の再生レートでバッファリングが必要ない場合にトリガーされます。

期間変更

再生時間が変更されるとトリガーされます

ロードスタート

ブラウザが Web 上のデータの検索を開始すると起動します。

進捗

ブラウザがメディア ファイルをフェッチしているときにトリガーされます

つるす

ブラウザがメディア ファイルの取得を一時停止し、ファイルの取得が正常に終了しない場合にトリガーされます。

アボート

メディア データの取得が中止されたときに発生しますが、中止の原因はエラーではありません

エラー

メディア ファイルの取得中にエラーが発生するとトリガーされます

空になった

ネットワークが初期化されるときにトリガーされます

停滞した

ブラウザがメディア データの取得に失敗したときに発生します

ロードされたメタデータ

メディアメタデータのロードが完了したときに発生します

ロードされたデータ

現在の位置のメディア再生データがロードされたときにトリガーされます

探しています

ブラウザがデータをリクエストしているときに発生します

求めた

ブラウザがデータのリクエストを停止したときに発生します

上記のメソッド、プロパティ、イベントは JavaScript を通じて操作されます。

音楽プレーヤー

音楽プレーヤーは、サーバー、HTML ページ、スタイル ファイル、スクリプト ファイルの 4 つの部分に分かれています。

HTMLページ

ブートストラップでアイコンを使用するには、css フォルダーと fonts フォルダーを作成する必要があります。

自分でダウンロードできる bootstrap.min.js/bootstrap.min.js 内のすべてのファイルとフォントを紹介します。

内容は以下の通りです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>音乐播放器</title>
    <link rel="stylesheet" href="./css/bootstrap.css">
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>
<div class="music_main">
    <div class="music_left">
        <img class="music_img" id="music_img" src="./img/1.jpg" alt="">
    </div>
    <audio id="player">
        <source src="./audio/不分手的恋爱%20–%20汪苏泷.mp3" type="audio/mpeg">
        您的浏览器不支持 audio 元素。
    </audio>
    <div class="play_left">
        <div class="music_title">
            <span class="music_name">不分手的恋爱 – 汪苏泷</span>
            <span class="totalTimeSpan">/03:25</span>
            <span class="playTimeSpan">00:00</span>
        </div>
        <div class="music_rate">
            <div class="music-progress"></div>
        </div>
    </div>
    <div class="play_right">
        <i class="glyphicon glyphicon-step-backward" id="music_prev"></i>
        <i class="glyphicon glyphicon-play" id="music_dian"></i>
        <i class="glyphicon glyphicon-step-forward" id="music_next"></i>
    </div>
    <div class="music_right">
        <ul>
            <li><i class="glyphicon glyphicon-volume-up" id="setVolume"></i></li>
            <li>
                <div class="slider">
                    <input type="range" id="volume" min="0" max="100" value="0">
                </div>
            </li>
        </ul>
    </div>
</div>
<script src="./js/jquery-3.2.1.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/play.js"></script>
</body>
</html>

スタイルファイル

このうち音量設定はネット記事から拝借したスライダーを使って実現しています。

内容は以下の通りです。

* {
    margin: 0;
    padding: 0;
}

.music_main {
    position: fixed;
    left: 200px;
    bottom: 0;
    margin-left: 16px;
    margin-right: 16px;
    height: 70px;
    color: #ccc;
    width: 80%;
    box-shadow: 5px -6px 10px #ccc;
}

.music_left {
    float: left;
    height: 70px;
    margin-right: 10px;
}

.music_img {
    width: 70px;
    height: 70px;
}

.play_left {
    float: left;
    width: 450px;
    height: 70px;
}

.play_right {
    float: left;
    width: 400px;
    height: 70px;
    margin-left: 30px;
    color: #000000;
}

.play_left .music_title {
    margin-top: 12px;
    line-height: 28px;
    color: #000000;
}

.play_left .music_title .music_name {
    float: left;
    font-size: 18px;
}

.play_left .music_title .playTimeSpan {
    float: right;
}

.play_left .music_title .totalTimeSpan {
    float: right;
}

.play_left .music_rate {
    float: left;
    width: 98%;
    height: 5px;
    background: #ccc;
    margin-top: 8px;
    margin-left: 8px;
    border-radius: 2px;
}

.play_left .music-progress {
    height: 5px;
    background: #ffb800;
    border-radius: 2px;
    width: 0;
}

.music_right {
    width: 500px;
    height: 70px;
    float: left;
    color: #000000;
}

.music_right ul {
    list-style: none;
}

.music_right ul li {
    float: left;
    margin-left: 32px;
}

#music_prev {
    line-height: 70px;
    font-size: 24px;
    margin-left: 126px;
    margin-right: 21px;
    cursor: pointer;
}

#music_dian {
    line-height: 70px;
    font-size: 24px;
    margin-left: 21px;
    margin-right: 21px;
    cursor: pointer;
}

#music_next {
    line-height: 70px;
    font-size: 24px;
    margin-left: 21px;
    cursor: pointer;
}

#setVolume {
    line-height: 70px;
    font-size: 24px;
    cursor: pointer;
}

.slider {
    position: absolute;
    top: 50%;
    left: 73%;
    transform: translate(-50%, -50%);
    width: 200px;
    height: 14px;
    padding: 14px 0 14px 10px;
    border-radius: 14px;
    display: flex;
    align-items: center;
}

.slider p {
    font-size: 26px;
    font-weight: 600;
    padding-left: 30px;
}

.slider input[type="range"] {
    -webkit-appearance: none !important;
    width: 200px;
    height: 2px;
    background: #ffdf1f;
    border: none;
    outline: none;
}

.slider input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none !important;
    width: 30px;
    height: 30px;
    background: black;
    border: 2px solid black;
    border-radius: 50%;
    cursor: pointer;
}

.slider input[type="range"]::-webkit-slider-thumb:hover {
    background: black;
}

スクリプトファイル

プレーヤーの楽曲情報の割り当て、再生の一時停止、曲の切り替え、音量の設定などの機能をjsを使用して実現します。

このうち代入部分ですが、ajaxリクエストはデフォルトでは非同期になっているため、代入に問題が発生するため、同期リクエストに変更します。

内容は以下の通りです。

window.onload = function () {
    // 绑定音频元素
    var $player = document.getElementById('player');

    // 绑定播放按钮
    var $dian = document.getElementById('music_dian');

    // 设置音频初始属性
    var volume_num = 0.5;

    // 当前歌曲索引
    var currentIndex = 0;

    // 设置播放列表
    var music_list = [{
        'id': 1,
        'cover': './img/1.jpg',
        'singer': '汪苏泷',
        'song_name': '不分手的恋爱',
        'song_path': '../audio/不分手的恋爱%20–%20汪苏泷.mp3'
    },];

    // 初始化设置
    setInit();

    // 绑定音频控制开关
    $dian.onclick = function () {
        if (this.classList == 'glyphicon glyphicon-play') {
            this.className = 'glyphicon glyphicon-pause';
            $player.play();
        } else {
            // layui-icon-pause
            this.className = 'glyphicon glyphicon-play';
            $player.pause();
        }
    };

    // 设置播放器初始属性
    function setInit() {
        // 设定音量
        $player.volume = volume_num;
        $('#volume').val(volume_num * 100);

        // 通过同步方式获取播放列表信息
        $.ajaxSettings.async = false;
        $.getJSON('./service.php', {}, function (res) {
            // 赋值播放列表
            music_list = res;
        });

        // 设定歌曲封面
        $('#music_img').attr('src', music_list[0].cover);

        // 设定歌曲名称和歌手
        $('.music_name').text(music_list[0].song_name + ' - ' + music_list[0].singer);

        // 设定歌曲路径
        $player.src = music_list[0].song_path;
    }

    // 监听播放器播放时间改变事件
    $player.addEventListener('timeupdate', function () {
        // 当前播放时间
        var currentTime = $player.currentTime;
        // 总时间
        var totalTime = $player.duration;

        // 当是数字的时候
        if (!isNaN(totalTime)) {
            // 得到播放时间与总时长的比值
            var rate = currentTime / totalTime;
            // 设置时间显示
            // 播放时间
            $('.playTimeSpan').text(musicTime(currentTime));
            // 总时长
            $('.totalTimeSpan').text('/' + musicTime(totalTime));
            // 设置进度条
            $('.music-progress').css('width', rate * 441 + 'px');
        }
    });

    // 设置音量
    $('#volume').change(function () {
        volume_num = $(this).val();
        $player.volume = volume_num * 0.01
    });

    // 上一首
    $('#music_prev').click(function () {
        if (currentIndex > 0) {
            currentIndex -= 1;
        } else {
            // 切换到最后一首
            currentIndex = music_list.length - 1;
        }
        // 设置播放标识为暂停
        $dian.className = 'glyphicon glyphicon-play';
        // 播放时间
        $('.playTimeSpan').text('00:00');
        // 设置歌曲进度归零
        $('.music-progress').css('width', '1px');
        // 设置歌曲
        setMusic();
    });

    // 下一首
    $('#music_next').click(function () {
        if (currentIndex < (music_list.length - 1)) {
            currentIndex += 1;
        } else {
            // 切换为第一首
            currentIndex = 0;
        }
        // 设置播放标识为暂停
        $dian.className = 'glyphicon glyphicon-play';
        // 播放时间
        $('.playTimeSpan').text('00:00');
        // 设置歌曲进度归零
        $('.music-progress').css('width', '1px');
        // 设置歌曲
        setMusic();
    });

    // 设置播放器歌曲信息
    function setMusic() {
        // 设定歌曲封面
        $('#music_img').attr('src', music_list[currentIndex].cover);
        // 设定歌曲名称和歌手
        $('.music_name').text(music_list[currentIndex].song_name +
            ' - ' + music_list[currentIndex].singer);
        // 设定歌曲路径
        $player.src = music_list[currentIndex].song_path;
    }

    // 歌曲时长(00:00)
    function musicTime(sens) {
        // 分
        var m = parseInt(sens / 60);
        // 秒
        var s = parseInt(sens % 60);
        // 补零
        m = m > 9 ? m : "0" + m;
        s = s > 9 ? s : "0" + s;
        return m + ":" + s;
    }
};

サーバ

php 言語は単純なプレーヤーなので主にデータを返すために使用されますが、ここではデータを json 形式で返すだけですが、通常のプロジェクトではデータ処理を行ってから形式出力を行う必要があります。

内容は以下の通りです。

header('content-type:text/html;charset=utf8 ');

$arr = [
    [
        'id' => 1,
        'cover' => './img/1.jpg',
        'singer' => '汪苏泷',
        'song_name' => '不分手的恋爱',
        'song_path' => './audio/不分手的恋爱%20–%20汪苏泷.mp3'
    ],
    [
        'id' => 2,
        'cover' => './img/2.jpg',
        'singer' => '张镐哲',
        'song_name' => '不是我不小心',
        'song_path' => './audio/不是我不小心%20–%20张镐哲.mp3'

    ],
    [
        'id' => 3,
        'cover' => './img/3.jpg',
        'singer' => '郑源&陶钰玉',
        'song_name' => '不要在我寂寞的时候说爱我',
        'song_path' => './audio/不要在我寂寞的时候说爱我%20–%20郑源&陶钰玉.mp3'
    ],
    [
        'id' => 4,
        'cover' => './img/4.jpg',
        'singer' => '齐秦',
        'song_name' => '不让我的眼泪陪我过夜',
        'song_path' => './audio/不让我的眼泪陪我过夜%20–%20齐秦.mp3'
    ],
];

echo json_encode($arr);

要約する

ブラウザの下部にホバリングを固定して実装された音楽プレーヤー。主に、曲情報の表示、曲の再生と一時停止、曲の再生後の対応する進行状況の表示、音量の調整 (デフォルトは 50%)、ロゴによる曲の切り替えを実現します。

音楽プレーヤーの練習を通じて、オーディオの属性とイベントをより深く理解し、それらを適用する方法をマスターしました。次は、より複雑なアプリケーションを作成する予定です。

参考記事

js を使用して曲の長さを取得する_HTML5 チュートリアル: JS を使用したシンプルな音楽プレーヤーの開発

おすすめ

転載: blog.csdn.net/json_ligege/article/details/131857826