WeChat-Applet zur automatischen Videowiedergabe imitiert Beispiel eines GIF-Animationseffekts

WeChat-Applet zur automatischen Videowiedergabe imitiert Beispiel eines GIF-Animationseffekts

Nachfragehintergrund:

Fügen Sie dynamische GIF-Bilder in die Miniprogrammseite ein. GIF-Bilder sind jedoch im Allgemeinen groß. Verwenden Sie stattdessen den automatischen Videowiedergabemodus, um den Effekt von GIF-Bildern zu simulieren und die Seitenanzeige zu verbessern. Automatische Videowiedergabe, keine Steuerleiste, kein Ton und automatische Schleife.

Technische Schwierigkeiten:

Da sich das WeChat-Miniprogramm auf derselben Seite befindet, kann es bei mehreren Videos (nicht mehr als 3 Videos werden empfohlen) zu Verzögerungen oder sogar Abstürzen kommen.
developer.weixin.qq.com/community/d…

planen:

Beachten Sie den Diskussionsplan der Miniprogramm-Community. Wenn das Video nicht im sichtbaren Bereich des Bildschirms angezeigt wird, nehmen Sie den Platz mit einem Bild ein, das auf dem Bildschirm angezeigt wird, das Bild durch das Video ersetzt und automatisch abgespielt wird.

Codehinweise:

Der Video-Tag wird durch wx:if gesteuert und der Bild-Tag wird durch den Sichtbarkeitsstil belegt.

<view class="container" style="Breite: {{videoWidth}}rpx;Höhe: {{videoHeight}}rpx">
  <image class="image" style="Sichtbarkeit: {{play ? 'hidden' : 'sichtbar'}};" id="image_{{videoId}}" src="{{poster}}" />
  <video class="video" wx:if="{{play}}" id="video_{{videoId}}" controls="{{controls}}" object-fit='enthalten' show-center-play-btn="{{showCenterPlayBtn}}" enable-progress-gesture="{{enableProgressGesture}}" direction="{{direction}}" enable-play-gesture="{{enablePlayGesture}}" muted="{{muted}}" loop="{{loop}}" src="{{videoUrl}}" />
</Ansicht>
.container {
    Position: relativ;
    Breite: 100 %;
    Höhe: 100%;
}
.Bild {
    Position: absolut;
    oben: 0;
    links: 0;
    rechts: 0;
    unten: 0;
    Z-Index: 10;
    Breite: 100 %;
    Höhe: 100%;
}
.video {
    Breite: 100 %;
    Höhe: 100%;
}
Komponente({
    Eigenschaften:
        // Videobreite videoWidth: {
            Typ: Nummer,
            Wert: 0,
        },
        // Videohöhe videoHeight: {
            Typ: Nummer,
            Wert: 0,
        },
        // Videoposter/Coverposter: {
            Typ: Zeichenfolge,
            Wert: '',
        },
        // Videolink videoUrl: {
            Typ: Zeichenfolge,
            Wert: '',
        },
        // Ob die Steuerelemente des Wiedergabefortschrittsbalkens angezeigt werden sollen: {
            Typ: Boolean,
            Wert: false,
        },
        // Ob die mittlere Wiedergabetaste angezeigt werden soll showCenterPlayBtn: {
            Typ: Boolean,
            Wert: false,
        },
        // Ist es stummgeschaltet: {
            Typ: Boolean,
            Wert: true,
        },
        // Ob die Stummschalttaste angezeigt werden soll showMuteBtn: {
            Typ: Boolean,
            Wert: true,
        },
        // Ob die Gestensteuerung für den Fortschritt aktiviert werden soll enableProgressGesture: {
            Typ: Boolean,
            Wert: false,
        },
        // Ob die Wiedergabe per Gestensteuerung aktiviert werden soll enablePlayGesture: {
            Typ: Boolean,
            Wert: false,
        },
        // Richtung: {
            Typ: Nummer,
            Wert: 0,
        },
        //Geben Sie die Startzeit der Wiedergabe in Sekunden an. showPlayTime: {
            Typ: Nummer,
            Wert: 0,
        },
        // Video-ID (eindeutige Kennung)
        Video-ID: {
            Typ: Zeichenfolge,
            Wert: '',
        },
        // Ob gespielt werden soll play: {
            Typ: Boolean,
            Wert: false,
        },
        //Ob die Wiedergabe in einer Schleife erfolgen soll: {
            Typ: Boolean,
            Wert: true,
        },
    },
    Daten: {
        paly: false, // Ob der Kontext abgespielt werden soll: null, // Das erstellte Video-Instanzobjekt},
    Lebensdauern:
        beigefügt() {
            this.videObserve();
        },
    },
    Methoden: {
        // Überwachen, ob die Videokomponente in den sichtbaren Bereich eintritt videObserve() {
            dieser._observer = dieser.createIntersectionObserver({
                observeAll: wahr,
            });

            this._observer.relativeToViewport().observe(`#image_${this.data.videoId}`, (res) => {
                //res.intersectionRatio === 0 bedeutet keine Schnittmengewenn (res.intersectionRatio === 0) {
                    dies.setData({
                        spielen: falsch,
                    });
                } anders {
                    const ctx = this.data.context || wx.createVideoContext(`video_${this.data.videoId}`, this);
                    wenn (ctx) {
                        dies.setData(
                            {
                                Kontext: ctx,
                                spielen: wahr,
                            },
                            () => {
                                // Die Verzögerung besteht darin, zu warten, bis der wxml-Knoten erstellt wurde, und ihn dann nach Erhalt des Knotens abzuspielen, da sonst die Wiedergabe möglicherweise fehlschlägt setTimeout(() => {
                                    ctx.spielen();
                                }, 400);
                            }
                        );
                    }
                }
            });
        },
    },
});

Rendern

Das Video wird erst geladen und abgespielt, wenn es den sichtbaren Bereich erreicht. Wenn das Video den sichtbaren Bereich verlässt, wird play=false gesetzt und der Video-Tag gelöscht, d. h. das Video wird gelöscht.

Zukünftige Optimierungspunkte

Derzeit wird beim Starten des Videos ein schwarzer Bildschirm angezeigt. Wir werden sehen, ob es später in Weiß geändert werden kann (Weiß ist akzeptabler als Schwarz), und es hängt auch von der Unterstützung des Miniprogrammvideos ab.

Derzeit gibt es keine Begrenzung für die Anzahl der Videos, die gleichzeitig auf einem Bildschirm abgespielt werden können. Wenn die Breite und Höhe des Videos relativ gering sind, werden möglicherweise viele Videos auf einem Bildschirm angezeigt, was zu Verzögerungen oder Abstürzen führen kann.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Verwendung von WeChat-Miniprogrammen zum automatischen Abspielen von Videos und zum Imitieren von GIF-Animationen. Weitere verwandte Miniprogramme, die automatisch Videos abspielen und GIF-Animationen imitieren, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Klicken Sie auf das Bild, um das Video automatisch abzuspielen

<<:  Detaillierte Erläuterung des Aufbaus und der Schnittstellenverwaltung des Docker Private Warehouse

>>:  Beispiele für 4 Methoden zum Einfügen großer Datenmengen in MySQL

Artikel empfehlen

Lassen Sie Ihren Text mit dem Marquee-Attribut in HTML tanzen

Syntax: <marquee> …</marquee> Mithilfe...

Haben Sie die MySQL-Verbindungsabfrage wirklich gelernt?

1. Übersicht über Inner Join-Abfragen Der Inner J...

Vertikales und horizontales Aufteilen von MySQL-Tabellen

Vertikale Teilung Vertikale Aufteilung bezieht si...

Beispielcode zum automatischen Umbrechen des Pre-Tags

Das Pre-Element definiert vorformatierten Text. In...

Eine kurze Einführung in die Abfrageeffizienz von MySQL-Speicherfeldtypen

Die Suchleistung von der schnellsten bis zur lang...

Schritte zum Ändern des MySQL-Zeichensatzes auf UTF8 unter Linux

Inhaltsverzeichnis 1. Überprüfen Sie den MySQL-St...

Natives JS zur Implementierung eines Hover-Dropdown-Menüs

JS implementiert ein Hover-Dropdown-Menü. Dies is...

Docker-Tutorial: Container verwenden (einfaches Beispiel)

Wenn Sie mit Docker noch nicht vertraut sind, seh...

Zusammenfassung der allgemeinen Bedienungskenntnisse der MySQL-Datenbank

Dieser Artikel fasst gängige Betriebstechniken fü...

Tiefgreifendes Verständnis der verschiedenen Sperren von MySQL

Inhaltsverzeichnis Schlossübersicht Sperrklassifi...

Detaillierte Erläuterung der MySQL-Transaktionsverarbeitung

1. MySQL-Transaktionskonzept MySQL-Transaktionen ...