JavaScript-Canvas zum Erzielen von Meteoreffekten

JavaScript-Canvas zum Erzielen von Meteoreffekten

In diesem Artikel wird der spezifische Code für JavaScript-Canvas zur Anzeige von Meteor-Spezialeffekten zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

1. Transparenzänderungsfunktion steuern

Funktion easeInQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            let x = curtime/duration; //x-Wertlet y = x*x; //y-Wertreturn begin+(end-begin)*y; //füge die ursprüngliche Formel ein}
        //Kernfunktion der langsamen Verzögerungsbewegung, konstruiert mit der Quadratwurzel: x*x + 2*x
Funktion easeOutQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            let x = curtime/duration; //x-Wertlet y = -x*x + 2*x; //y-Wertreturn begin+(end-begin)*y; //füge die ursprüngliche Formel ein}
Funktion easeInoutQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            if(curtime<duration/2){ //Erste Hälfte der Zeit return easeInQuad(curtime,begin,(begin+end)/2,duration/2); //Änderungsbetrag und Zeit werden durch 2 geteilt
            }anders{
                let curtime1 = curtime-duration/2; //Beachten Sie, dass die Zeit von der ersten Hälfte abgezogen werden sollte let begin1 = (begin+end)/2; //Die Anfangsmenge sollte zur in der ersten Hälfte abgeschlossenen Menge addiert werden return easeOutQuad(curtime1,begin1,end,duration/2); //Die Änderungsmenge und die Zeit werden durch 2 geteilt
            }
}

2. Blitzeffekte des Meteorhalos

Funktion IntervallOpcity (aktuell=0,Start=0,3,Ende=0,8,Dauer=3) {
            wenn (fadeOpcity(aktuell,Start,Ende,Dauer)===Ende){
                aktuell = 0
                lass temp = start
                Anfang = Ende 
                Ende = temp
            }
            let opcity = fadeOpcity(aktuell,Start,Ende,Dauer)
            lass Farbe = `rgba(0,0,0,${opcity})`
            Hintergrundfarbe löschen (Umbruch)
            neuesPartikel (Wrap, [x, y], r, Farbe)
            aktuell = parseFloat(aktuell + 0,1)
            setTimeout(()=>{Intervallbetrieb (aktuell,Start,Ende,Dauer)},33)
}

3. Meteorschweif

Funktion IntervallBewegung (Geschwindigkeit,g=0) {
            wenn(g===720){
                g = 360
            }
            g = g + Geschwindigkeit
            let nächstePosition = movePosition(a,g,startPosition)
            x = nächstePosition[0]
            y = nächstePosition[1]
            Hintergrundfarbe löschen(Wrap1)
            für (lass i =1;i<=360;i++){
                sei g1 = gi/2
                wenn(g1<0&&g<=360){
                    brechen
                }
                let g1Position = movePosition (a, g1, startPosition)
                neuesPartikel (Wrap1, [g1Position[0], g1Position[1]], r/(1+i/5),`rgba(255,200,200,0,5)`)
            }
            setTimeout(()=>{Intervallbewegung (Geschwindigkeit,g)},33)
        }

4. Code vervollständigen

Funktion easeInQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            let x = curtime/duration; //x-Wertlet y = x*x; //y-Wertreturn begin+(end-begin)*y; //füge die ursprüngliche Formel ein}
        //Kernfunktion der langsamen Verzögerungsbewegung, konstruiert mit der Quadratwurzel: x*x + 2*x
        Funktion easeOutQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            let x = curtime/duration; //x-Wertlet y = -x*x + 2*x; //y-Wertreturn begin+(end-begin)*y; //füge die ursprüngliche Formel ein}
        Funktion easeInoutQuad(aktuelle Zeit, Beginn, Ende, Dauer){
            if(curtime<duration/2){ //Erste Hälfte der Zeit return easeInQuad(curtime,begin,(begin+end)/2,duration/2); //Änderungsbetrag und Zeit werden durch 2 geteilt
            }anders{
                let curtime1 = curtime-duration/2; //Beachten Sie, dass die Zeit von der ersten Hälfte abgezogen werden sollte let begin1 = (begin+end)/2; //Die Anfangsmenge sollte zur in der ersten Hälfte abgeschlossenen Menge addiert werden return easeOutQuad(curtime1,begin1,end,duration/2); //Die Änderungsmenge und die Zeit werden durch 2 geteilt
            }
        }
        Funktion newCanvas (Breite,Höhe) {
            let bodyEl = Dokument.body
            let canvasEl = document.createElement("canvas")
            canvasEl.width = Breite
            canvasEl.height = Höhe
            canvasEl.style.position = "absolut"
            bodyEl.anhängen(canvasEl)
            let wrap = canvasEl.getContext("2d")
            Rücksendeverpackung
        }
        Funktion setBgcolor (Wrap, Farbe) {
            Wrap.Füllstil=Farbe;
            wrap.fillRect(0,0,wrap.canvas.Breite,wrap.canvas.Höhe);
        }
        Funktion Hintergrundfarbe löschen(Umbruch){
            Wrap.ClearRect(0,0,Wrap.Canvas.Breite,Wrap.Canvas.Höhe)
        } 
        Funktion neuesPartikel(Wrap,Position,r,Farbe) {
            sei x = Position[0]
            sei y = Position[1]
            Wrap.Füllstil=Farbe;
            } wrap.beginPath();
            Wrap.Arc(x,y,r,0,2*Math.PI);
            Wrap.Schattenunschärfe = 20;
            wrap.shadowColor=`rgba(255,255,255,0.8)`;
            umbrechen.füllen();
        }
        Funktion fadeOpcity(aktuell,Start,Ende,Dauer){
            let opcity = parseFloat(easeInoutQuad(aktuell,start,end,dur).toFixed(2)) 
            Rückgabeoption
        }
       let wrap0 = newCanvas(1000,800)
       let wrap2 = newCanvas(1000,800)
       let wrap = neueLeinwand(1000,800)
       let wrap1 = newCanvas(1000,800)
       
        setBgcolor (Wrap0, "schwarz")
        setBgcolor (Umbruch,"rgba(0,0,0,0)")
        setBgcolor (Wrap1, "rgba (0,0,0,0)")
        setBgcolor (Wrap2, "rgba (0,0,0,0)")
        let startPosition = [500,200]
        sei r = 10
        sei a = -200
        sei x = a*(1-Math.cos(0))*Math.sin(0)+startPosition[0]
        sei y = a*(1-Math.cos(0))*Math.cos(0)+startPosition[1]
        Funktion Verschiebeposition (a,g,Startposition) {
            sei t = Math.PI*2/360
            sei x = a*(1-Math.cos(g*t))*Math.sin(g*t)+startPosition[0]
            sei y = a*(1-Math.cos(g*t))*Math.cos(g*t)+startPosition[1]
            Rückgabewert [x,y]
        }
        Funktion IntervallBewegung (Geschwindigkeit,g=0) {
            wenn(g===720){
                g = 360
            }
            g = g + Geschwindigkeit
            let nächstePosition = movePosition(a,g,startPosition)
            x = nächstePosition[0]
            y = nächstePosition[1]
            Hintergrundfarbe löschen(Wrap1)
            für (lass i =1;i<=360;i++){
                sei g1 = gi/2
                wenn(g1<0&&g<=360){
                    brechen
                }
                let g1Position = movePosition (a, g1, startPosition)
                neuesPartikel (Wrap1, [g1Position[0], g1Position[1]], r/(1+i/5),`rgba(255,200,200,0,5)`)
            }
            setTimeout(()=>{Intervallbewegung (Geschwindigkeit,g)},33)
        }

        Funktion IntervallOpcity (aktuell=0,Start=0,3,Ende=0,8,Dauer=3) {
            wenn (fadeOpcity(aktuell,Start,Ende,Dauer)===Ende){
                aktuell = 0
                lass temp = start
                Anfang = Ende 
                Ende = temp
            }
            let opcity = fadeOpcity(aktuell,Start,Ende,Dauer)
            lass Farbe = `rgba(0,0,0,${opcity})`
            Hintergrundfarbe löschen (Umbruch)
            neuesPartikel (Wrap, [x, y], r, Farbe)
            aktuell = parseFloat(aktuell + 0,1)
            setTimeout(()=>{Intervallbetrieb (aktuell,Start,Ende,Dauer)},33)
        }
IntervallOpcity()
IntervallBewegung (1)

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • JavaScript + HTML5-Canvas zum Erzielen von Bildfragmentierungs- und Reorganisationsanimationseffekten
  • js canvas realisiert Sternenhimmel-Hintergrundeffekt
  • js Canvas realisiert zufällige Partikeleffekte
  • Bringen Sie Ihnen bei, Dutzende von Zeilen JS zu verwenden, um coole interaktive Canvas-Effekte zu erzielen

<<:  Detaillierte Schritte zur Installation von Python 3.7 auf CentOS 6.5

>>:  Detaillierte Erläuterung der Verwendung der integrierten Funktion „locate instr position find_in_set“ in der effizienten Fuzzy-Suche von MySQL

Artikel empfehlen

Implementierung von LNMP für die separate Bereitstellung von Docker-Containern

1. Umweltvorbereitung Die IP-Adresse jedes Contai...

Detaillierte Erklärung der grundlegenden Typen von TypeScript

Inhaltsverzeichnis Boolescher Typ Nummerntypen Ze...

Lösung für die in Firefox oder IE nicht ermittelte Spannweite

Code kopieren Der Code lautet wie folgt: <html...

Detaillierte Erklärung, wie zwei Node.js-Prozesse kommunizieren

Inhaltsverzeichnis Vorwort Kommunikation zwischen...

Beispielanalyse der drei Verbindungsmethoden für virtuelle VMware-Maschinen

NAT Auf diese Weise wird die Netzwerkkarte der vi...

Allgemeine Funktionen der MySQL-Grundlagen

Inhaltsverzeichnis 1. Allgemeine Funktionsklassif...

So implementieren Sie eine einzelne Dateikomponente in JS

Inhaltsverzeichnis Überblick Einzelne Dateikompon...

Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen

1. Docker mountet das lokale Verzeichnis Docker k...

So definieren Sie Datenbeispiele in Vue

Vorwort Im Entwicklungsprozess ist das Definieren...