In einem aktuellen Projekt musste ich die Funktion zur Fortsetzung der Videowiedergabe ab Haltepunkten implementieren. Sobald ich von dieser Funktion hörte. Innerlich war ich nervös … aber insgeheim auch ein bisschen glücklich und ein bisschen verwirrt. Nehmen Sie die Herausforderung mit einer lernbereiten Einstellung an. 1. Installieren Sie das Pluginnpm installiere vue-video-player --save 2. Main.js führt Komponenten einVideoPlayer von „vue-video-player“ importieren erfordern('video.js/dist/video-js.css') erfordern('vue-video-player/src/custom-theme.css') Vue.use(VideoPlayer) 3. Seite mit Komponenten<el-tree :data="KapitelOptionen" :props="StandardProps" Knotenschlüssel='id' Highlight-aktuell :filter-node-method="Filterknoten" ref="Baum" Standardmäßig alles erweitern @node-click="handleNodeClick" /> <video-player ref="videoPlayer" Klasse = "Videoplayer vjs-custom-skin" Stil="Breite: 1000px;Höhe: 576px;Anzeige: Inline-Flex" :playsinline="wahr" :Optionen="Spieleroptionen" @pause="beiPlayerPause($event)" @ended="beiPlayerEnded($event)" @play="beiPlayerPlay($event)" @timeupdate="beiPlayerTimeupdate($event)" @ready="Spieler bereit" /> <Skript> importiere { videoPlayer } von 'vue-video-player' importiere 'video.js/dist/video-js.css' importiere „vue-video-player/src/custom-theme.css“ importiere { treeselect } aus "@/api//driver/videoChapter"; importiere Treeselect aus „@riophae/vue-treeselect“; importiere "@riophae/vue-treeselect/dist/vue-treeselect.css"; Standard exportieren { Name: "videoPlayer", Komponenten: { Treeselect, videoPlayer }, Daten() { zurückkehren { //Benutzerinformationen user:{}, //=============================== pausiert: wahr, Lerndauer: userId: '', //Benutzer-ID chapterId:'', //Kapitel-ID timeLog: '', //Videowiedergabezeit}, Spieleroptionen: { playbackRates: [0.5, 1.0, 1.5, 2.0], //Wiedergabegeschwindigkeit autoplay: false, // Wenn wahr, startet der Browser die Wiedergabe, wenn sie bereit ist. stummgeschaltet: false, // Standardmäßig wird sämtliches Audio stummgeschaltet. loop: false, // Bewirkt, dass das Video neu gestartet wird, sobald es endet. preload: „auto“, // Gibt an, ob der Browser mit dem Herunterladen der Videodaten beginnen soll, nachdem das <video>-Element geladen wurde. auto Der Browser wählt das beste Verhalten und beginnt sofort mit dem Laden des Videos (sofern der Browser dies unterstützt). Sprache: 'zh-CN', aspectRatio: „16:9“, // Setzen Sie den Player in den Flüssigkeitsmodus und verwenden Sie diesen Wert bei der Berechnung der dynamischen Größe des Players. Der Wert sollte ein Verhältnis darstellen – zwei durch einen Doppelpunkt getrennte Zahlen (z. B. „16:9“ oder „4:3“). fluid: true, // Wenn wahr, hat der Video.js-Player eine flüssige Größe. Mit anderen Worten: Es wird proportional skaliert, um in den Container zu passen. Quellen: { Typ: „video/mp4“, // Hier werden viele Typen unterstützt: grundlegendes Videoformat, Live-Übertragung, Streaming-Medien usw. Weitere Einzelheiten finden Sie im Git-URL-Projekt src: „// URL-Adresse}“ ], hls: stimmt, Poster: „“, // Breite Ihrer Titeladresse: document.documentElement.clientWidth, // Breite des Players notSupportedMessage: „Dieses Video kann momentan nicht abgespielt werden. Bitte versuchen Sie es später erneut.“, // Ermöglicht Ihnen, die Standardmeldung zu überschreiben, die angezeigt wird, wenn Video.js die Medienquelle nicht abspielen kann. Kontrollleiste: { //Das Trennzeichen zwischen der aktuellen Zeit und der Dauer timeDivider: true, //Anzeigedauer durationDisplay: true, // Ob die verbleibende Zeit angezeigt werden soll Funktion remainderTimeDisplay: false, //Vollbild-Schaltfläche fullscreenToggle: true } } }; }, berechnet: { Spieler() { returniere dies.$refs.videoPlayer.player //Benutzerdefinierte Wiedergabe} }, montiert () { dieser.Timer = setzeIntervall(dieses.putLearningObj, 3000) }, zerstört () { // Wenn der Timer läuft, schalte ihn aus if (this.timer) { Intervall löschen(dieser.Timer) } }, Methoden: { //Benutzerinformationen getUser() { getUserProfile().then(Antwort => { dieser.Benutzer = Antwort.Daten; diese.learningDuration.userId = dieser.user.userId }); }, //============================ Vollbild() { const player = this.$refs.videoPlayer.player player.requestFullscreen() //Rufen Sie die Vollbild-API-Methode player.isFullscreen(true) auf Spieler.spielen() }, beiPlayerPlay(Spieler) { dies.paused = false // Spieler.spielen() }, beiPlayerPause (Spieler) { dies.paused = wahr // console.log('beiSpielerPause!', Spieler) }, onPlayerEnded (Spieler) { dies.paused = falsch; // Intervall löschen(dieser.Timer); }, //Wird ausgelöst, wenn sich die aktuelle Wiedergabeposition ändert. onPlayerTimeupdate (Spieler) { // console.log('beiPlayerTimeupdate!', this.timeLog) }, /* Videofortschritt festlegen */ playerReadied: Funktion (Spieler) { }, }; </Skript> Die obige Quellvideoadresse kann durch eine bestimmte Adresszeichenfolge oder durch eine Hintergrundadresszeichenfolge ersetzt werden. Da es sich bei mir um einen Kapitelbaum handelt, habe ich ihn mit der Kapitel-ID verknüpft. /** Dropdown-Baumstruktur der Abfrageabteilung*/ getTreeselect() { treeselect().then((Antwort) => { //Abdeckung var img = ''; dies.ChapterOptions = Antwort.Daten; für (lass i = 0; i < this.ChapterOptions.length ; i++) { dieser.videoName = dieser.ChapterOptions[0].children[0].chapterName this.videoIntroduce = this.ChapterOptions[0].children[0].chapterIntroduce diese.VideoUrl = JSON.parse(diese.ChapterOptions[0].children[0].videoAddress) img = JSON.parse(diese.ChapterOptions[0].children[0].imageAddress) //Initialisiere die Abdeckung für (let j = 0; j <img.length; j++) { dies.playerOptions.poster =img[0]; } //Initialisiere das erste Kapitelvideo für (let j = 0; j <this.VideoUrl.length; j++) { diese.playerOptions.sources[0].src = diese.VideoUrl[0] } //Kapitel initialisieren this.learningDuration.chapterId = this.ChapterOptions[0].children[0].id; //Standardmäßig ersten Kapitelknoten hervorheben this.$nextTick(()=>{ dies.$refs.tree.setCurrentKey(diese.ChapterOptions[0].children[0].id); }) } }); }, // Filterknoten filterNode(value, data) { wenn (!Wert) gibt true zurück; gibt data.label.indexOf(Wert) zurück !== -1; }, // Knotenklickereignis handleNodeClick(data) { // konsole.log(Daten) var img = ''; //Originalvideo aktualisieren, Originalcover this.playerOptions.sources[0].src = ''; dies.playerOptions.poster = ''; //Video konvertieren this.VideoUrl = JSON.parse(data.videoAddress); // konsole.log("diese.VideoUrl") für (lass i = 0; i < this.VideoUrl.length ; i++) { diese.playerOptions.sources[0].src = diese.VideoUrl[0]; } img = JSON.parse(Daten.Bildadresse); für (sei i = 0; i < img.length ; i++) { dies.playerOptions.poster = img[0]; } // console.log("this.playerOptions.sources[0].src") // Konsole.log(diese.PlayerOptions.Sources[0].src) //Kapiteleinführung this.videoIntroduce = data.chapterIntroduce; //Kapitelname this.videoName = data.chapterName; //Kapitel-ID this.learningDuration.chapterId = Daten-ID // Konsole.log(dieses.videoIntroduce) }, 4. Fortschritt speichern Der nächste Schritt besteht darin, den Fortschrittsbalken des Videos zu speichern. Durch Drucken wird festgestellt, dass onPlayerTimeupdate den Fortschritt des Videos abrufen kann. Daher wird alle 3 Sekunden ein Timer verwendet, um eine Dateninteraktion auszulösen. berechnet: { Spieler() { returniere dies.$refs.videoPlayer.player //Benutzerdefinierte Wiedergabe} }, montiert () { dieser.Timer = Intervall festlegen(dieses.putLearningObj, 3000) }, zerstört () { // Wenn der Timer läuft, schalte ihn aus if (this.timer) { Intervall löschen(dieser.Timer) } }, Methoden: { setzeLernObj() { wenn (!diese.paused) { //Videofortschritt speichern saveTime(this.learningDuration) console.log('putLearningObj ~~~~~~~~~~~') } }, //Wird ausgelöst, wenn sich die aktuelle Wiedergabeposition ändert. onPlayerTimeupdate (Spieler) { this.learningDuration.timeLog = Spieler.cache_.currentTime // console.log('beiPlayerTimeupdate!', this.timeLog) }, }, saveTime ist meine benutzerdefinierte Methode für die Interaktion mit dem Backend. (Sie können es selbst definieren) // Videofortschritt speichern Exportfunktion saveTime(data) { Rückgabeanforderung({ URL: '/***/****/***/', Methode: 'put', Daten: Daten }) } An dieser Stelle kann der Fortschritt gespeichert werden. 4. Fortschrittswiederherstellung Wenn Sie den Fortschritt wiederherstellen möchten, müssen Sie den gespeicherten Fortschritt auf das Video setzen, bevor das Video abgespielt wird. Beim Drucken können Sie sehen, dass playerReadied gesetzt werden kann /* Videofortschritt festlegen */ playerReadied: Funktion (Spieler) { //Hier können Sie die Methode zur Hintergrundinteraktion aufrufen … Spieler.aktuelleZeit(diese.Lerndauer.ZeitLog) }, An diesem Punkt kann der Fortschritt wiederhergestellt werden und Sie sind fertig! . Da die Datenanforderungen für die Hintergrundinteraktion unterschiedlich sind, wird der Code nicht veröffentlicht. Dies ist das Ende dieses Artikels über Vue-Video-Player-Breakpoint-Resume. Weitere verwandte Inhalte zu Vue-Video-Player-Breakpoint-Resume finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Installations-Tutorial zur MySQL 5.7.17 Zip-Paketversion unter Win10
>>: Installieren Sie CentOS 7 auf VMware14 – Grafik-Tutorial
Herunterladen und Installieren von JDK Schritt 1:...
1. Umgebung: CentOS7, Openssl1.1.1k. 2. Konzept: ...
Inhaltsverzeichnis Konfigurieren Sie zuerst packa...
In der neuesten Version von WIN10 hat Microsoft e...
Die Wirkung ist wie folgt: eine Seite Nach dem Kl...
1. MySQL-Archiv herunterladen (dekomprimierte Ver...
Sehen Sie sich die Installationsinformationen von...
Code kopieren Der Code lautet wie folgt: <html...
In der MySQL-Datenbank können Tabellen, nachdem s...
Vorwort Samba ist eine kostenlose Software, die d...
Das in diesem Beispiel entwickelte kaskadierende ...
Inhaltsverzeichnis Überblick 1. Kompositions-API ...
Wie wir alle wissen, sind Binlog-Protokolle für M...
Inhaltsverzeichnis eins. Umfeld zwei. Vorsichtsma...
Es gibt einige Probleme mit der komprimierten Ver...