プレーヤー機能を実現するための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 データベースの作成、ユーザーの追加、ユーザー認証の実用的な方法

1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...

Centos に MYSQL8.X をインストールするチュートリアル

MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 1

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...

ウェブサイトのフッター沈下現象に対する3つの解決策を詳しく解説

背景多くのウェブサイトのデザインは、一般的にコンテンツ+フッターの2つの部分で構成されています。コン...

k8sとDockerの関係についての簡単な説明

最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...

JavaScript によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...

MySQL マスタースレーブ同期の原理と応用

目次1. マスタースレーブ同期原理マスタースレーブ同期アーキテクチャ図(非同期同期)マスタースレーブ...

MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

パスワード入力後にMySQLデータベースがクラッシュする問題と解決策1 ケースの説明最近、基本的な機...

Angularルーティングサブルートの詳細な説明

目次1. サブルート構文2. 例1. 2つの新しいコンポーネントを作成し、その内容を変更する2. ル...

WeChatアプレットのスクロールビューが左右連動効果を実現

WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容...

Dockerアーキテクチャ入門

Docker には 3 つの基本概念が含まれています。イメージ: Docker イメージはルート フ...

React、Angular、Vueの3つの主要なフロントエンド技術の詳細説明

目次1. 反応する基本的な使い方注目すべき機能クラスコンポーネント仮想DOMライフサイクルメソッドJ...

Dockerはコンテナ外のコンテナ内でコマンドを実行します

コンテナ内でコマンドを実行したいが、コンテナに入りたくない場合があります。ではどうすればいいでしょう...

Javascriptはセキュリティ検証に整合性属性を使用します

目次1. スクリプトタグを使用してファイルをインポートする1. ローカルファイルをインポートする2....