検索
ホームページウェブフロントエンドjsチュートリアル音楽再生コントロールバーをjsで実装する方法

音楽再生コントロールバーをjsで実装する方法

Sep 09, 2017 am 09:25 AM
javascript成し遂げるコントロール


はじめに

HTML5 はオーディオ再生を実装する audio タグを提供します。私は常にオーディオとビデオの再生に興味があり、これも自分でオーディオとビデオの再生モジュールを実装したいと考えていました。最近、当初の目的に基づいてオーディオ再生コントロール バーを実装することに時間を費やしましたが、この小さなモジュールの実装から、これまで知らなかった知識も学びました。

オーディオ実装のアイデア

ブラウザによってネイティブに提供されるオーディオのスタイルは比較的シンプルで、あまり見栄えが良くありません。
音楽再生コントロールバーをjsで実装する方法

自己実装された音楽再生コントロール バー、効果は次のとおりです。
音楽再生コントロールバーをjsで実装する方法

音楽が再生されます コントロールバーによって実装される機能は次のとおりです:

  • 音楽再生(最も基本的な)

  • ループ再生を実現するための複数の音楽の手動切り替えと自動切り替え

  • 進行状況バー クリックして再生の進行状況を変更します

  • 進行状況 バーをドラッグして再生の進行状況を変更します

  • クリックして音量を変更します

  • ドラッグして音量を変更します

具体的な実装効果:
音楽再生コントロールバーをjsで実装する方法
以下は、特定の機能の実装と実装された音楽再生コントロールのプログレスバーの詳細な紹介です主に学習と使用のために、互換性を考慮せずに、主に各機能の実装アイデアを説明します:

全体

一番下音楽再生全体のコントロールの層は依然としてブラウザーの audio タグを使用して実装されており、次のように全体的な機能を実現するためにオーディオ API が呼び出されます。これは現在のコントロール バーの HTML 構造です:

<p class="audio">
    <audio></audio>
    <p class="audio-controller">
        <span class="audio-prev"></span>
        <span class="audio-state"></span>
        <span class="audio-next"></span>
     </p>
     <p class="audio-bar">
        <span class="audio-time-current"></span>
        <p class="audio-progress">
            <p>
                <p></p>
                <p></p>
                </p>
            </p>
        <span class="audio-time-duration"></span>
     </p>
     <p class="audio-volume">
        <span class="audio-volume-icon"></span>
        <p class="audio-volume-adjust">
            <p>
                <p></p>
                <p></p>
            </p>
        </p>
     </p></p>

audio-controller : 曲の再生や切り替えを制御するエリアです
オーディオバー: 時間と曲の進行状況を表示するエリアです
audio-volume: 音量調整領域です

再生領域

この領域は、音楽の再生、一時停止、切り替え (前の曲、次の曲) を実装します。実際には、この部分では説明する必要はありません。 Play()とpause()は、配列要素を変更し、srcアドレスを変更することで、再生と一時停止を実装します。

進行状況エリア

このエリアはモジュール全体の中核となる部分です。このエリアの主な機能ポイントは次のとおりです:

  • 進行状況エフェクトの実装

  • まず、進行状況の実装です。アイデアは次のとおりです:

プログレス バーは 2 つの p で構成されます:
  • // 最外层作为音楽再生コントロールバーをjsで実装する方法暗的长度区域<p>    // 最内层是实际表示进度
        <p></p>
    </p>

音楽再生コントロールバーをjsで実装する方法

プログレス バーがクリックされると、x 軸方向に対するマウス クリック ポイントのオフセットを取得します。最も近い親要素のオフセットです
  • オフセットは内部レイヤーpの実際の幅です。背景色の設定

  • スライダーの位置は左の値を設定することですが、左の値は次のとおりです。 - スライダー幅/2

  • このモジュールを作成する際、スライディングの実装は HTML5 のドラッグ アンド ドロップ API を使用しませんが、具体的な実装コード:
  •     // 滑动音楽再生コントロールバーをjsで実装する方法
        bar.addEventListener(&#39;mousedown&#39;, function(e) {
            e.stopPropagation();        // 获取滑块被选择时相对文档的初始X轴值
            options.clientX = e.clientX;        // 偏移量
            options.left = this.offsetLeft;
            options.max = bgNode.offsetWidth - this.offsetWidth / 2;
            options.isDrag = true;
        });
        document.addEventListener(&#39;mousemove&#39;, function(e) {
            e.stopPropagation();        if (options.isDrag) {            let currentClientX = e.clientX,
                    left = options.left,
                    max = options.max,
                    initClientX = options.clientX,
                    barHalfWidth = bar.offsetWidth / 2,
                    fgWidth = 0,                // 设置要滑动到的位置点(x轴方向偏移量)
                    to = Math.max(0, Math.min(max, left + (currentClientX - initClientX)));
    
                bar.style.left = to + &#39;px&#39;;            if (to > barHalfWidth) {
                    fgWidth = to + barHalfWidth;
                }
                fgNode.style.width = Math.max(0, fgWidth) + &#39;px&#39;;
                options.offsetX = Math.max(0, fgWidth);
            }
        });
    
        bgNode.parentNode.addEventListener(&#39;mouseup&#39;, function(e) {
            e.stopPropagation();        if (options.isDrag) {            // 绘制此时的进度
                tools.timeUpdateOrVolumeUpdate(options.offsetX, type);
                options.isDrag = false;
            }
        });
を使用します。 :

mousemove 時に取得されます。ドキュメント内のマウスの現在の X 軸位置 - 初期位置 + 要素の初期オフセット。これは、left の値を動的に変更することで実現されます。

進行状況は、実際には次のように表示されます。 p の幅、幅の値を動的に変更し、スライドする進行状況効果を実現するブロックの左の値

ここで注意する必要があるのは:

現在の進行状況バーの合計幅の比例関係さまざまなオーディオ時点に対応する進行の長さを計算するための合計オーディオ時間は、これが基礎になります

  • 実際、これも非常に簡単に計算できます:

比率: 幅 / 長さ

時間の幅を指定します: (幅 / 期間) * currentTime

音量調整の実装は進行状況の実装と似ていますが、主に音量の実装が変更されます。

このモジュールの問題について話しましょう:

スライダー効果が不自然で滑らかではない場合があります

  • オーディオファイルの時間処理が十分ではありません

  • 進行部分はあまり良くありませんでした始まり

  • コードは私の Github にアップロードされる予定で、このモジュールは将来的に改善する必要があります。

以上が音楽再生コントロールバーをjsで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)