プレーヤー機能を実現するためのvue + element uiのサンプルコード

プレーヤー機能を実現するためのvue + element uiのサンプルコード

効果画像のない表示は単なる空虚な言葉です。

ここに画像の説明を挿入

1. オーディオをベースにし、elementUI と組み合わせたプログレスバーの実装
2. 再生/一時停止、早送り、ミュート、音量調整、ダウンロードなど、プレーヤーの基本機能を実現します。

HTMLコード、重要部分はコメント化されている

<div class="right di main-wrap" v-loading="audio.waiting">
   <!-- ここでの ref 属性は、this.$refs.audio を通じて Vue コンポーネント内の DOM 要素を簡単に取得するために使用できます -->
   <audio ref="audio" class="dn"
   :src="url" :preload="audio.preload"
   @play="再生中"
   @error="エラー時"
   @waiting="待機中"
   @pause="一時停止中"
   @timeupdate="onTimeupdate"
   @loadedmetadata="読み込み済みのメタデータ"
   </オーディオ>

   <div class="w-full">
     <div class="flex items-center w-10/12 mx-auto">
       <!-- 現在の時刻 -->
       <el-tag type="info">{{ audio.currentTime | formatSecond}}</el-tag>

       <!-- スクロールバー -->
       <el-slider v-show="!controlList.noProcess" v-model="sliderTime" :format-tooltip="formatProcessToolTip" @change="changeCurrentTime" class="slider_time"></el-slider>
       <!-- 合計所要時間 -->
       <el-tag type="info">{{ audio.maxTime | formatSecond }}</el-tag>
     </div>
     <div class="mt-3 flex items-center w-1/2 mx-auto justify-around">
       <!-- 再生/一時停止 -->
       <el-button type="text" @click="startPlayOrPause">{{audio.playing | transPlayPause}}</el-button>
       <!-- 早送り -->
       <el-button v-show="!controlList.noSpeed" type="text" @click="changeSpeed">{{audio.speed | transSpeed}}</el-button>
       <!-- ミュート -->
       <el-button v-show="!controlList.noMuted" type="text" @click="startMutedOrNot">{{audio.muted | transMutedOrNot}}</el-button>
       <!-- ボリューム -->
       <div class="flex items-center">
         <span class="mr-2 text-sm">ボリューム</span>
         <el-slider v-show="!controlList.noVolume" v-model="volume" :format-tooltip="formatVolumeToolTip" @change="changeVolume" class="slider_voice"></el-slider>
       </div>

       <!-- ダウンロード -->
       <a :href="url" rel="external nofollow" v-show="!controlList.noDownload" target="_blank" class="download text-sm" download>ダウンロード</a>
     </div>
   </div>
 </div>

jsコード

<スクリプト>
  // 整数を時間:分:秒の形式に変換する function realFormatSecond(second) {
    var secondType = 秒の型

    if (secondType === '数値' || secondType === '文字列') {
      秒 = parseInt(秒)

      var hours = Math.floor(秒 / 3600)
      秒 = 秒 - 時間 * 3600
      var mimute = Math.floor(秒 / 60)
      秒 = 秒 - 分 * 60

      時間を返す + ':' + ('0' + mimute).slice(-2) + ':' + ('0' + second).slice(-2)
    } それ以外 {
      '0:00:00' を返す
    }
  }

  エクスポートデフォルト{
    名前: 'voicetotext',
    小道具: {
      速度:
        タイプ: 配列、
        デフォルト () {
          [1, 1.5, 2]を返す
        }
      },
      コントロールリスト: {
        タイプ: 文字列、
        デフォルト: ''
      }
    },
    データ(){
      戻る {
        URL: 'https://wdd.js.org/element-audio/static/falling-star.mp3',
        オーディオ:
          現在の時刻: 0,
          最大時間: 0,
          再生中: false、
          ミュート: false、
          速度: 1,
          待機中: true、
          プリロード: 'auto'
        },

        スライダー時間: 0,
        ボリューム: 100、
        速度: this.theSpeeds、

        コントロールリスト: {
          // ダウンロードを表示しない noDownload: false,
          // ミュートを表示しない noMuted: false,
          // ボリュームバーを表示しない noVolume: false,
          // 進捗バーを表示しない noProcess: false,
          // 1つだけ再生できます onlyOnePlaying: false,
          // 早送りしないボタン noSpeed: false
        }
      }
    },
    方法:{
      コントロールリストを設定する(){
        controlList を this.theControlList.split(' ') とします。
        コントロールリスト.forEach((アイテム) => {
          if(this.controlList[item] !== 未定義){
            this.controlList[item] = true
          }
        })
      },
      速度を変更する() {
        インデックス = this.speeds.indexOf(this.audio.speed) + 1 とします。
        this.audio.speed = this.speeds[インデックス % this.speeds.length]
        this.$refs.audio.playbackRate = this.audio.speed
      },
      ミュートまたはミュートしない() {
        this.$refs.audio.muted = !this.$refs.audio.muted
        this.audio.muted = this.$refs.audio.muted
      },
      // ボリュームバーのツールチップ
      formatVolumeToolTip(インデックス) {
        'ボリュームバー: ' + インデックスを返す
      },
      //進捗バーのツールチップ
      フォーマットプロセスツールチップ(インデックス = 0) {
        インデックス = parseInt(this.audio.maxTime / 100 * インデックス)
        '進捗バー: ' + realFormatSecond(index) を返します
      },
      // ボリューム変更changeVolume(index = 0) {
        this.$refs.audio.volume = インデックス / 100
        this.volume = インデックス
      },
      // 再生ジャンプ changeCurrentTime(index) {
        this.pausePlay()
        this.$refs.audio.currentTime = parseInt(インデックス / 100 * this.audio.maxTime)
      },
      再生または一時停止() {
        this.audio.playing を返しますか? this.pausePlay() : this.startPlay()
      },
      // 再生を開始する startPlay() {
        this.$refs.audio.play()
      },
      // 一時停止 pausePlay() {
        this.$refs.audio.pause()
      },
      // オーディオが一時停止されたとき onPause () {
        this.audio.playing = false
      },
      // エラーが発生すると、読み込み状態が表示されます onError() {
        this.audio.waiting = true
      },
      // オーディオが待機を開始すると onWaiting (res) {
        コンソール.log(res)
      },
      // オーディオの再生が始まると onPlay (res) {
        コンソール.log(res)
        this.audio.playing = true
        this.audio.loading = false

        if(!this.controlList.onlyOnePlaying){
          戻る
        }

        ターゲットをres.targetとします

        audios = document.getElementsByTagName('audio'); となります。

        [...オーディオ].forEach((アイテム) => {
          if(アイテム !== ターゲット){
            アイテム.一時停止()
          }
        })
      },
      // timeupdate イベントは、オーディオ ストリームの現在の再生時間を更新するために 1 秒あたり約 1 回呼び出されます。onTimeupdate(res) {
        // コンソール.log('timeupdate')
        // コンソール.log(res)
        this.audio.currentTime = res.target.currentTime
        this.sliderTime = parseInt(this.audio.currentTime / this.audio.maxTime * 100)
      },
      //音声ストリームメタデータがロードされると、このイベントのコールバック関数がトリガーされます //音声メタデータには主に音声の長さなどのデータが含まれます onLoadedmetadata(res) {
        this.audio.waiting = false
        this.audio.maxTime = parseInt(res.target.duration)
      }
    },
    フィルター:
      フォーマット秒(秒 = 0) {
        realFormatSecond(秒)を返す
      },
      transPlayPause(値) {
        戻り値 ? '一時停止' : '再生'
      },
      transMutedOrNot(値) {
        戻り値 ? '再生' : 'ミュート'
      },
      トランススピード(値) {
        '早送り: x' + 値を返す
      }
    },
    作成された() {
      this.setControlList()
    }
  }
</スクリプト>

CSSコードはSCSSを使用しています

<スタイル スコープ lang="scss">
  。右{
     幅: 100%;
     パディング: 10px 15px;
     表示: インラインブロック;
     .スライダー{
       表示: インラインブロック;
       位置: 相対的;
       上: 14px;
       左マージン: 15px;
     }
     .slider_time{
       幅: 550ピクセル;
       マージン: 0 10px;
     }
     .slider_voice{
       幅: 80ピクセル;
     }
     .ダウンロード{
       色: #409EFF;
       左マージン: 15px;
     }

     .dn{
       表示: なし;
     }
   }

</スタイル>

美しいテスト音楽も収録されています
https://wdd.js.org/element-audio/static/falling-star.mp3

これで、vue + element ui でプレーヤー機能を実現する方法についての記事は終了です。より関連性の高い vue element ui プレーヤーのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue の Vue-Video-Player 操作
  • vue-video-player ビデオプレーヤーの詳細設定
  • vue-dplayer ビデオ プレーヤーのサンプル コード
  • VueはカスタムH5ビデオプレーヤーの方法と手順を実装します
  • vue-elementコンポーネントに基づく音楽プレーヤー機能の実装
  • vue-video-player をベースにしたプレーヤーのカスタマイズ方法
  • Vue ページに音楽プレーヤーを実装する例
  • vue-music の Player コンポーネントの詳細な説明
  • vue 音楽プレーヤープラグイン vue-aplayer の設定と使用例の詳細な説明
  • Vue.jsは音楽プレーヤーを実装します

<<:  MySql はデータを正常に挿入しますが、[Err] 1055 エラーが報告されます。解決策

>>:  Linux での Centos7 ファイアウォールの基本的な使用方法の詳細な説明

推薦する

複数レベルの複雑な動的ヘッダーの avue-crud 実装例

目次序文バックグラウンドデータの結合フロントエンドデータ表示ページ効果表示Avue.js は、既存の...

MySQLでNULL値を判定する際の落とし穴事例

目次序文Mysql の case when 構文:事例実践:要約:序文今日、プログラムを開発している...

検証例 MySQL | 同じ値を持つフィールドを更新すると、binlog に記録されます

1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...

Dockerコンテナは定期的にデータベースをバックアップし、指定されたメールボックスに送信します(設計アイデア)

目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....

画像ファイルの形式とその選択方法

1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...

Tomcat での jar のロードに関する異常な問題の分析と解決

現象の説明:プロジェクトでは、Springboot を使用して Web プロジェクトを開始します。起...

docker イメージのプル速度が遅い問題の解決策

現在、Docker には中国向けの公式ミラーがあります。詳細については、https://www.do...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

MySQL UPDATE ステートメントの非標準実装コード

今日は、MySQL データベースと SQL 標準 (および他のデータベース) の UPDATE ステ...

CSS が複数のクラスに一致する方法のサンプルコード

CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

フォーム要素の簡単な実装コードでは登録を例に挙げています

コード実装:コードをコピーコードは次のとおりです。 <!DOCTYPE html> &l...

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

MySQL、Oracle、SQL Server のページングクエリ例の分析

最近、Oracle、MySQL、SQL Server 2005 のデータ ページング クエリについて...