プレーヤー機能を実現するための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 ファイアウォールの基本的な使用方法の詳細な説明

推薦する

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

React NativeのScrollViewプルダウンリフレッシュ効果

この記事では、React Native ScrollViewのプルダウンリフレッシュ効果の具体的なコ...

Nodejs 組み込み暗号化モジュールを使用してピアツーピアの暗号化と復号化を実現する詳細な説明

暗号化と復号化は、通信のセキュリティを確保するための重要な手段です。すでに多くの暗号化アルゴリズムが...

CSSアニメーションがJSによってブロックされるかどうかについての簡単な議論

CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...

Nginx ローカル ディレクトリ マッピング実装コード例

他のデバイスの画像をローカルディレクトリにマウントするなど、サーバー上の静的リソースにアクセスする必...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

角度でechartsマップを使用する詳細な説明

目次echartの初期化アプリベースチャートコンポーネントhtml CS app-base-char...

Linux ファイアウォールを設定してポート 80 と 3306 を開く方法

ポート80も設定されています。まずファイアウォール設定ファイルを入力しますシェル># vim ...

MySQLのデフォルトのソートルールに基づく落とし穴

MySQL のデフォルトの varchar 型は大文字と小文字を区別しません (insensitiv...

Vmwareでディスクを追加する方法:ディスクを拡張する

この記事では、ディスクを追加または拡張して、Vmare で有効にする方法について説明します。シナリオ...

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...

docker を使用してシンプルな C/C++ プログラムをデプロイする方法

1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...

デザイン理論:人の心を理解する方法

<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...