Kosmische afbeeldingen worden op veel websites gebruikt als achtergrondafbeelding. Die foto's zijn ongetwijfeld mooi, maar het zijn tenslotte toch beelden die weinig levendigheid geven. Met jQuery kunnen we een nog steeds kosmisch beeld van dertig leven brengen door wat ruimtestof (deeltjes) toe te voegen dat vliegt als vuurvliegjes. In deze zelfstudie zullen we zien hoe we dit effect in 30 minuten kunnen implementeren. We zullen ook een beetje objectgerichte Javascript-technieken leren.
We zullen voor een lange tijd naar deze kosmische achtergrond staren. Om onze ogen comfortabeler te maken, wordt een donkere en eenvoudige afbeelding gebruikt als achtergrond in deze zelfstudie. Voel je vrij om meer kleurrijke afbeeldingen te gebruiken in je eigen projecten.
Om dit effect er realistischer uit te laten zien, hebben we vier modellen met deeltjes in deze zelfstudie. Het zijn kleine afbeeldingen met verschillende afmetingen en uiterlijk. Kijk naar de figuur hieronder voor meer details:
In tegenstelling tot de meeste tutorials, is het de achtergrond van een webpagina waarop we ons vandaag zullen concentreren, waardoor de HTML vrij eenvoudig is:
Het vuurvliegeffect
Laten we nu het leven van een deeltje eens nader bekijken. Elk deeltje kan er anders uitzien. En ze bewegen met verschillende snelheden en richtingen. Maar ze volgen allemaal dezelfde regels die kunnen worden omschreven als een reeks acties:
Elk deeltje volgt precies deze acht stappen gedurende zijn levensduur. En de willekeurige factoren, zoals positie en snelheid, zorgen ervoor dat elk deeltje zich op een unieke manier gedraagt. Dit is een perfect geval om een aantal objectgeoriënteerde programmeertechnieken te implementeren. Laten we deze acht stappen omwikkelen in een 'klasse' die vele keren zal worden geïnstantieerd om meerdere exemplaren van dezelfde logica te maken. Elke instantie (deeltje) wordt op een afzonderlijke baan uitgevoerd en behoudt zijn eigen snelheid en richting.
Het is belangrijk om op te merken dat er geen JavaScript-klassen zijn. Functies kunnen worden gebruikt om klassen enigszins te simuleren, maar in het algemeen is JavaScript gebaseerd op prototypen in plaats van op klassen. Alles is een object. Raadpleeg deze artikelen voor meer informatie over het definiëren en instantiëren van een JavaScript-'klasse '.
In ditzelfde effect wordt een 'klasse' gedefinieerd en vervolgens 50 keer geïnstantieerd met de volgende code.
function Particle () // 1. Kies willekeurig een deeltjesmodel. // 2. Maak een DOM voor dit deeltje. // 3. Genereer een willekeurige snelheid voor dit deeltje. // 4. Genereer de beginpositie (punt X en punt Y) voor dit deeltje. // 5. Geef het deeltje weer op de positie die is gegenereerd in 4. // 6. Genereer een andere positie (Punt X en Punt Y) waarnaar het deeltje zich verplaatst. // 7. Animeer de deeltjesbeweging naar de positie die is gegenereerd in 6. // 8. Herhaal 6 en 7 zodra de animatie die in 7 afwerkingen wordt genoemd. ; function randomInt (max) // Genereer een willekeurig geheel getal (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(); );
In deze sectie zullen we eigenschappen en methoden definiëren voor de klasse Deeltjes. En we zullen zien hoe willekeurig een deeltjesmodel te kiezen.
We kunnen de 'deze'sleutelwoord om eigenschappen voor een' klasse 'te definiëren. Als het gaat om het definiëren van methoden,prototype'eigendom is de manier om te gaan. Kijk naar de onderstaande code en we zullen wat uitleg geven.
function Particle () this.path = 'images /'; this.images = ['particle1.png', 'particle2.png', 'particle3.png', 'particle4.png']; // Kies willekeurig een deeltjesmodel this.image = this.images [randomInt (this.images.length)]; this.file = this.path + this.image; // Maak een Particle DOM this.element = document.createElement ('img'); // Een reeks acties om This.speed (). NewPoint (). Display (). NewPoint (). Fly (); ; // Genereer een willekeurige snelheid Particle.prototype.speed = function () ; // Genereer een willekeurige positie Particle.prototype.newPoint = function () ; // Geef de Particle Particle.prototype.display = function () ; // Beweeg deeltjesbewegingen Particle.prototype.fly = function () ;
In feite zijn er veel verschillende manieren om eigenschappen en methoden voor een Javascript-klasse te definiëren. Hier is een geweldig artikel over dit onderwerp.
Inmiddels hebben we een idee hoe dit effect werkt. In dit gedeelte beginnen we functies te schrijven die we gebruiken om de beweging van een deeltje te manipuleren.
Laten we eerst een willekeurige snelheid voor een deeltje genereren. De snelheid bepaalt hoe snel een deeltje reist. Als u bekend bent met jQuery, begrijpt u dat we niet zomaar in real-time kunnen gaan, zeg 100 pixels per seconde. In feite is de parameter die wordt gebruikt om de snelheid in jQuery te beschrijven de duur gemeten in milliseconden. Dus de vraag wordt hoe je een redelijke duur kunt genereren waarin een deeltje van de ene plaats naar de andere reist. Hoe zit het met de volgende code?
// Genereer willekeurige snelheid Particle.prototype.speed = function () this.duration = (randomInt (10) + 5) * 1000; geef dit terug; ;
Een willekeurige verzameling X-Y-posities is erg handig in dit effect. Het kan worden gebruikt om te bepalen:
Dit is de code die we nodig hebben om een willekeurige reeks X-Y-posities te genereren.
// Genereer een willekeurige positie Particle.prototype.newPoint = function () this.pointX = randomInt (window.innerWidth - 100); this.pointY = randomInt (window.innerHeight - 100); geef dit terug; ;
De grootte van het huidige browservenster kan worden opgehaald window.innerWidth en window.innerHeight. Als een deeltje voorbij de grens van het venster vliegt, verschijnen er schuifbalken. We willen misschien niet dat dit gebeurt. Dus laten we de beweging van de deeltjes beperken in een gebied dat 100 pixels minder hoog en breed is dan het browservenster. De bovenstaande code zou vrij eenvoudig moeten zijn. Nadat deze functie is uitgevoerd, pointX en puntig eigenschappen worden toegankelijk. Zodra de functie een tweede keer wordt uitgevoerd, pointX en puntig zal worden vernieuwd in het geval van Deeltje.
In voorgaande secties was al een img DOM gemaakt voor een nieuw deeltje. Nu gaan we enkele attributen instellen en het deeltje ergens in het browservenster weergeven. Dit wordt bereikt met de volgende code.
// Geef de Particle Particle.prototype.display = function () $ (this.element) .attr ('src', this.file) .css ('position', 'absolute') .css ('top', this.pointY) .css ('left', this.pointX); $ (Document.body) .append (this.element); geef dit terug; ;
Eindelijk, we zijn naar het animatiedeel gekomen dat misschien eenvoudiger lijkt dan je dacht.
De animatiefunctie in jQuery zal ons helpen. Er zijn vier parameters nodig: animeren (params, duur, versnelling, callback). Raadpleeg de documentatie als u geen idee heeft wat het doet.
// Beweeg deeltjesbeweging Particle.prototype.fly = function () var self = this; $ (this.element) .animation ("top": this.pointY, "left": this.pointX,, this.duration, 'linear', function () self.speed (). newPoint (). fly ();); ;
Wat de bovenstaande code doet is vrij eenvoudig:
Dus de vlieg() functie roept zichzelf herhaaldelijk op. Met deze recursieve functie gaat de animatie voor altijd door. Inmiddels kunnen we het hele verhaal van het leven van een deeltje schrijven. Onthoud de volgende ketting nog?
. This.speed () Newpoint () display () Newpoint () fly ()...;
Laten we eens kijken wat het doet:
Als deze stappen klinken als een tongverdraaiing naar je ... Kijk eens naar deze figuur. Je zou nu elke stap moeten kunnen coderen. En je moet weten hoe je alle dingen in een objectgerichte structuur moet organiseren. Eindelijk is het vuurvliegeffect voltooid.
Nu moet iedereen dit effect in uw eigen projecten kunnen implementeren. Hopelijk heb je ook een beter begrip van objectgeoriënteerde Javascript.
Het belangrijkste ding dat ik leuk vind aan dit effect, is dat je door het veranderen van achtergrond en partikelafbeeldingen, compleet verschillende looks en feel kunt produceren. Je kunt vliegtuigen of zelfs supermensen op je webpagina laten vliegen als je dat wilt. Je verbeelding is de limiet.
Dat is alles voor deze tutorial. Hoop dat je het leuk vind. Bedankt voor het lezen!