Vueはビデオ再生を実装するためにビデオタグを使用します

Vueはビデオ再生を実装するためにビデオタグを使用します

この記事では、ビデオタグを使用してビデオ再生を実装するVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

プロジェクト要件:ビデオのスクロール バーを動的に表示し、ビデオのダウンロードを禁止し、再生中に 5 秒ごとに現在の継続時間を更新し、10 分ごとにビデオを一時停止してプロンプトを表示します。
これまで、動画を再生する場合、完全なカプセル化機能と優れた再生ソース互換性を備えているため、基本的に vue-video-player コンポーネントが使用されていました。
このプロジェクトの要件を通じて、ビデオ タグの特性と方法についても詳しく研究しました。ここで詳細をお伝えします。

具体的な使い方は以下のとおりです

<テンプレート>
  <!-- ビデオ コンポーネント -->
  <div id="common-video" class="h-100">
    <div:class="{isShow:control}" class="h-100">
      <ビデオ
        ref="私のビデオ"
        :poster="ポスター"
        :src="src"
        :controls="コントロール"
        oncontextmenu="false を返す"
        @timeupdate="時間更新"
        コントロールリスト="nodownload"
        クラス="ビデオボックス"
      </ビデオ>
      <画像
        src="@/assets/images/playbtn.png"
        代替案=""
        @click="ビデオを操作する"
        class="ポインタ操作ボタン"
        :class="{ 'フェードアウト': videoState }"
      />
    </div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: "CommonVideo",
  データ() {
    戻る {
      videoState: false, // ビデオ再生ステータス // 学習時間 studyTime: {
        currentTime: 0, // 現在の学習時間 期間: 0 // 合計時間},
      timer: {}, // タイマー pauseTimer: {} // タイマーを一時停止 };
  },
  /**
   * @param ポスター表示画像* @param src ビデオリソース* @param controls コントロールを表示するかどうか* @param control コントロール* @param videoData 基本ビデオデータ*/
  小道具: {
    ポスター:
      タイプ: 文字列、
      必須: false、
      デフォルト: ""
    },
    ソース: {
      タイプ: 文字列、
      必須: true
    },
    コントロール: {
      タイプ: ブール値、
      必須: false、
      デフォルト: true
    },
    コントロール: {
      タイプ: ブール値、
      必須: false、
      デフォルト: false
    },
    ビデオデータ: {
      タイプ: オブジェクト、
      必須: true
    }
  },
  マウント() {
    // ビデオの再生をリッスンします this.$refs.myVideo.addEventListener("play", () => {
      console.log("ビデオが再生中です");
      タイマーをオープンします。
    });
    // ビデオの一時停止をリッスンします。this.$refs.myVideo.addEventListener("pause", () => {
      console.log("ビデオが停止しました");
      this.closeTimer();
    });
  },
  メソッド: {
    // タイマーを開く openTimer() {
      this.timer = setInterval(() => {
        this.$emit("videoStudyTime", this.studyTime);
      }, 5000);
    },
    // タイマーを閉じる closeTimer() {
      タイマー間隔をクリアします。
      this.$emit("videoStudyTime", this.studyTime);
    },
    // 一時停止タイマーを開く openPauseTimer() {
      this.pauseTimer = setInterval(() => {
        this.hintOperate();
      }, 600000);
    },
    // 一時停止タイマーを閉じる closePauseTimer() {
      間隔をクリアします(this.pauseTimer);
    },
    // ヒント操作 hintOperate() {
      this.operateVideo();
      this.$alert("確認して学習を続けるにはクリックしてください", "プロンプト", {
        confirmButtonText: "確認",
        確認ボタンクラス: "ヒントボタン"、
        表示閉じる: false,
        コールバック: アクション => {
          this.$refs.myVideo.currentTime = this.videoData.currentTime;
          ビデオを操作する
          this.openPauseTimer();
        }
      });
    },
    // 現在の再生位置を取得する timeupdate(e) {
      this.studyTime.currentTime = e.target.currentTime;
      this.studyTime.duration = e.target.duration ? e.target.duration : 0;
    },
    // ビデオの再生と一時停止を操作するoperateVideo() {
      (!this.src)の場合{
        this.$message({ message: "ビデオリソースがありません。他のビデオを確認してください!" });
        false を返します。
      }
      (this.$refs.myVideo.paused)の場合{
        this.$refs.myVideo.play();
        this.videoState は true です。
      } それ以外 {
        this.$refs.myVideo.pause();
        this.videoState = false;
      }
    }
  },
  時計:
    //監視操作 videoData(val, oldVal) {
      const { currentTime, 継続時間 } = val;
      現在の時刻 && 継続時間 && 現在の時刻 < 継続時間) {
        this.hintOperate();
      }
    }
  }
};
</スクリプト>

<スタイル lang="less">
#共通ビデオ{
  位置: 相対的;
  .ビデオボックス{
    ボックスのサイズ: 境界線ボックス;
    境界線: 0;
    表示: ブロック;
    幅: 100%;
    高さ: 100%;
    アウトライン: なし !important;
  }
  .isShow{
    // 進行状況バー video::-webkit-media-controls-timeline {
      表示: なし;
    }
  }
  ビデオ::-webkit-media-controls-再生ボタン {
    可視性: 非表示;
  }
  .操作ボタン{
    表示: ブロック;
    幅: 60ピクセル;
    高さ: 60px;
    位置: 絶対;
    上: calc(50% - 30px);
    左: calc(50% - 30px);
  }
  .operate-btn:hover {
    不透明度: 0.8;
  }
  .フェードアウト{
    不透明度: 0;
  }
}
</スタイル>

注記:

1. CSSスタイルのisShow属性を使用して、ビデオのスクロールバーを動的に表示する
2. ビデオタグのoncοntextmenu="return false"属性を使用してダウンロードを禁止する
3. ビデオタグの@timeupdate="timeupdate"メソッドを使用して、ビデオ再生の進行状況を監視します。
4. vue の ref 属性を使用して監視イベントをビデオ タグにバインドし、期間の統計、遅延プロンプト、アイコン再生ボタンの動的表示などの他の機能を実装します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vue ビデオ再生用の vue-video-player プラグインの使用方法
  • Vueはビデオ再生にvideo.jsを使用します
  • Vue と Video.js を組み合わせて m3u8 ビデオ ストリームを再生する方法の例
  • Vue ビデオ再生一時停止コード
  • vue-video-player ビデオプレーヤーの詳細設定
  • vue + typescript + video.js でストリーミングビデオ監視機能を実現
  • vue video.js で m3u8 ビデオ再生形式を解決する方法
  • vue-dplayer ビデオ プレーヤーのサンプル コード
  • Vue+video.jsはビデオプレイリストを実装します
  • Vue で h5 ビデオ タグを使用してポップアップ ウィンドウでローカル ビデオを再生する方法

<<:  MySQL 最適化チュートリアル: 大規模なページングクエリ

>>:  静的リソースファイルのアクセスログをフィルタリングするNginxの実装

推薦する

MySQL で B+ ツリー インデックスを使用する利点は何ですか?

この問題を理解する前に、まず MySQL テーブルのストレージ構造を確認し、次にバイナリ ツリー、マ...

JavaScript ベースのシンプルな計算機の実装

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...

CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...

MySQL テーブル フィールドの時間設定のデフォルト値

アプリケーションシナリオデータ テーブルでは、アプリケーションは各データがいつ作成されたかを記録する...

ubuntu20.04 LTS システムのデフォルト ソース ソース リスト ファイルの変更

誤って source.list の内容を変更し、一連のエラーが発生した場合は、デフォルトのソース フ...

Ubuntu 20.04 ベスト設定ガイド (初心者向け)

1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

Unix/Linuxフォークの隠れたオーバーヘッド

目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...

MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

インデックスを追加すると、クエリの効率が向上します。インデックスを追加するということは、ドキュメント...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

Server-U 14バージョンのインストールと使用方法

Server-Uソフトウェアの紹介Server-U は非常に強力なファイル マネージャーです。FTP...

Centos7 環境でソースコードから mysql5.7.16 をインストールする方法の詳細な説明

この記事では、centos7 環境でソース コードから mysql5.7.16 をインストールする方...

5 分で vue-cli3 を使用してプロジェクトを作成する方法を説明します (初心者向けガイド)

目次1. Vue環境を構築する2. Vue スキャフォールディングツール3. プロジェクトを作成する...

HTML で水平ナビゲーション構造を設定する方法

この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...