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の実装

推薦する

xtrabackup による MySQL データベースのバックアップと復元

mysqldump バックアップは、その独自の特性 (テーブルのロック、基本的に挿入スクリプトまたは...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

Reactにおけるフックの一般的な使用法

目次1. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...

ブラウザ(IEシリーズ)を判別するための条件付きコメント

<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...

Vue.jsで実装されたカレンダープラグインの使い方を詳しく説明します

本日実装する機能は、以下の機能です。vue.js シミュレーションカレンダープラグインさて、もう無駄...

ZooKeeper をベースにした Hadoop 高可用性クラスタの構築のチュートリアル図

目次1. 高可用性の概要1.1 可用性の高い全体アーキテクチャ1.2 QJMに基づく共有ストレージシ...

SQLクエリの実行順序をゼロから学ぶ

SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...

XHTML におけるタイトルタグと段落タグの使用に関する詳細な説明

XHTML 見出しの概要Word 文書を作成するときは、「第 1 章」、「1.2.1」などのタイトル...

プロセスのすべての情報を表示するLinuxメソッドの例

サーバー上にタスク プロセスがあります。 ps -ef | grep task を使用して表示すると...

VMware Workstation 15 Pro に Ubuntu 1804 をインストールするチュートリアル (画像とテキスト付き)

このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

Dayjs を使用して Vue で一般的な日付を計算する方法

vue を使用してプロジェクトを開発する場合、フロントエンドでは次のような日付と時刻を計算する必要が...

jQueryは要素を追加した後に元のイベントが実行されない問題を解決します

まずエラーコードを見てみましょう。 html: <テーブルボーダー="1"...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...