Kosmiska bilder används på många webbplatser som bakgrundsbild. Dessa bilder är utan tvekan vackra, men trots allt är de fortfarande bilder som ger liten livlighet. Med jQuery kan vi ta fram en still kosmisk bild trettio liv genom att lägga till lite rymdstoft (partiklar) som flyger som eldflugor. I denna handledning ser vi hur du implementerar denna effekt på 30 minuter. Vi lär oss också en del objektorienterade Javascript-tekniker.
Vi kommer att titta på denna kosmiska bakgrund under ganska lång tid. För att göra våra ögon bekvämare, används en mörk och enkel bild som bakgrund i denna handledning. Känn dig fri att använda mer färgstarka bilder i dina egna projekt.
För att göra denna effekt ser mer realistisk ut, har vi fyra modeller av partiklar i denna handledning. De är små bilder med olika storlek och utseende. Titta på bilden nedan för mer information:
Till skillnad från de flesta handledningar är det bakgrunden till en webbsida som vi fokuserar idag, vilket gör HTML ganska enkelt:
Firefly-effekten
Låt oss nu titta närmare på partikelns liv. Varje partikel kan skilja sig i utseende. Och de rör sig i olika hastigheter och riktningar. Men de följer alla samma regler som kan beskrivas som en följd av handlingar:
Varje partikel följer exakt dessa åtta steg under hela sin livstid. Och de slumpmässiga faktorerna, såsom position och hastighet, gör varje partikel uppför sig på ett unikt sätt. Detta är ett perfekt fall för att genomföra några objektorienterade programmeringstekniker. Låt oss sätta ihop dessa åtta steg i en "klass" som kommer att instantieras många gånger för att skapa flera instanser av samma logik. Varje förekomst (partikel) går i en separat lane och har sin egen hastighet och riktning.
Det är viktigt att notera att det inte finns några klasser i JavaScript. Funktioner kan användas för att något simulerar klasser, men i allmänhet är JavaScript prototypbaserat snarare än klassbaserat. Allt är ett föremål. För mer information om hur du definierar och instämmer i en JavaScript-klass, var god och kolla dessa artiklar.
I den här effekten definieras en "klass" och ställs sedan 50 gånger med följande kod.
funktion Partikel () // 1. Välj en partikelmodell slumpmässigt. // 2. Skapa en DOM för denna partikel. // 3. Generera en slumpmässig hastighet för denna partikel. // 4. Generera startpositionen (Punkt X och Punkt Y) för denna partikel. // 5. Visa partikeln vid den position som genereras i 4. // 6. Generera en annan position (Punkt X och Punkt Y) till vilken partikeln rör sig. // 7. Animera partikelrörelsen till den position som genereras i 6. // 8. Repetera 6 och 7 när animationen som nämns i 7 slutar. ; funktion randomInt (max) // Generera ett slumpmässigt heltal (0 <= randomInt < max) return Math.floor(Math.random() * max); $(function() var total = 50; var particles = []; for (i = 0; i < total; i++) particles[i] = new Particle(); );
I det här avsnittet definierar vi egenskaper och metoder för partikelklassen. Och vi får se hur man slumpmässigt väljer en partikelmodell.
Vi kan använda "detta"nyckelord för att definiera egenskaper för en" klass ". När det gäller att definiera metoder,prototyp"egendom är vägen att gå. Titta på koden nedan och vi ger några förklaringar.
funktion Partikel () this.path = 'images /'; this.images = ['particle1.png', 'particle2.png', 'particle3.png', 'particle4.png']; // Slumpmässigt Välj en partikelmodell this.image = this.images [randomInt (this.images.length)]; this.file = this.path + this.image; // Skapa en partikel DOM this.element = document.createElement ('img'); // En sekvens av åtgärder för att ta this.speed (). NewPoint (). Display (). NewPoint (). Fly (); ; // Skapa en slumpmässig hastighet Particle.prototype.speed = funktion () ; // Skapa en slumpmässig position Particle.prototype.newPoint = function () ; // Visa partikelpartikeln.prototype.display = funktion () ; // Animera partikelrörelser Particle.prototype.fly = function () ;
Faktum är att det finns många olika sätt att definiera egenskaper och metoder för en Javascript-klass. Här är en bra artikel om detta ämne.
Nu har vi en uppfattning om hur denna effekt fungerar. Från det här avsnittet börjar vi skriva funktioner som vi använder för att manipulera rörelsen hos en partikel.
Låt oss först skapa en slumpmässig hastighet för en partikel. Hastigheten bestämmer hur snabbt en partikel färdas. Om du är bekant med jQuery förstår du att vi inte bara kan skicka i realtid, säg 100 pixlar per sekund. Faktum är att parametern som används för att beskriva hastigheten i jQuery är varaktighet mätt i millisekunder. Så blir frågan hur man genererar en rimlig varaktighet där en partikel reser från en plats till en annan. Vad sägs om följande kod?
// Generera slumpmässig hastighet Particle.prototype.speed = function () this.duration = (randomInt (10) + 5) * 1000; returnera detta; ;
En slumpmässig uppsättning av X-Y-positionen är mycket användbar i denna effekt. Det kan användas för att bestämma:
Här är koden vi behöver för att generera en slumpmässig uppsättning X-Y-position.
// Skapa en slumpmässig position Particle.prototype.newPoint = function () this.pointX = randomInt (window.innerWidth - 100); this.pointY = randomInt (window.innerHeight - 100); returnera detta; ;
Storleken på det aktuella webbläsarfönstret kan hämtas från window.innerWidth och window.innerHeight. Om en partikel flyger bortom gränsen för fönstret kommer rullningsfält att dyka upp. Vi kanske inte vill att det ska hända. Så låt oss begränsa partikelrörelsen i ett område som är 100 pixlar mindre högt och bredt än webbläsarfönstret. Ovanstående kod ska vara ganska enkel. Efter den här funktionen exekveras, pointX och spetsig egenskaper blir tillgängliga. När funktionen körs en andra gång, pointX och spetsig kommer att förnyas i förevarande fall av Partikel.
I tidigare avsnitt skapades en img DOM redan för en ny partikel. Nu ska vi ange några attribut och visa partikeln någonstans i webbläsarfönstret. Detta uppnås med följande kod.
// Visa partikelpartikel.prototype.display = funktion () $ (this.element) .attr ('src', this.file) .css ('position', 'absolute') .css ('top' this.pointY) .css ("left", this.pointX); $ (Document.body) .append (this.element); returnera detta; ;
Slutligen har vi kommit till animationsdelen som kan bli enklare än du trodde.
Den animerade funktionen i jQuery gör tricket för oss. Det tar fyra parametrar: animera (parametrar, varaktighet, lättnad, återuppringning). Kolla in dokumentationen om du inte har någon aning om vad den gör.
// Animera partikelrörelser Particle.prototype.fly = function () var själv = this; $ (this.element) .animate ("top": this.pointY, "left": this.pointX,, this.duration, "linear", funktionen () self.speed (). newPoint (). flyga ();); ;
Vad ovanstående kod gör är ganska enkelt:
Så flyga() funktionen kallas upprepade gånger. Med denna rekursiva funktion går animationen på och av för alltid. Vid det här laget kan vi skriva hela historien om en partikelns liv. Kom ihåg fortfarande följande kedja?
. This.speed () Newpoint () display () Newpoint () flyg ()...;
Låt oss se vad det gör:
Om dessa steg låter som en tunga twister till dig ... Tja, titta på den här siffran igen. Du borde kunna koda varje steg nu. Och du borde veta hur man organiserar alla saker i en objektorienterad struktur. Slutligen är firefly-effekten klar.
Nu borde alla kunna genomföra denna effekt i dina egna projekt. Förhoppningsvis har du också en bättre förståelse av objektorienterad Javascript.
Den första sak jag älskar om denna effekt är att genom att ändra bakgrunds- och partikelbilderna, kan du producera helt annorlunda utseende. Du kan ha flygplan eller till och med supermän som flyger på din webbsida om du vill. Din fantasi är gränsen.
Det är allt för denna handledning. Hoppas du gillar det. Tack för att du läser!