Den perfekta Lightboxen? Använda PhotoSwipe med jQuery

Jag kom nyligen över ett JavaScript-bibliotek som heter PhotoSwipe, och jag är verkligen imponerad. Det är ett strålande bibliotek som överlägger en bild eller en grupp bilder på din nuvarande sida, en effekt som i allmänhet kallas ljuslåda. PhotoSwipe utvecklas för närvarande av Dmitry Semenov-han byggde om det förra året när han tog över projektet. Förbättringar inkluderar:

  • Modul: PhotoSwipe är inbyggd i flera moduler, så att du kan dike vissa funktioner du inte behöver. Detta håller biblioteket väldigt lätt.
  • Mottaglig: en oumbärlig funktion med alla medel. Photoswipe serverar den lämpliga bildstorleken baserat på det aktuella visningsporten.
  • Tryck på gest: PhotoSwipe stöder några rörelser som gör det möjligt för användarna att interagera via Knacka och klämma, vilket ger dem popup-fönster, zooma och stänga funktioner.

Den enda nackdelen är att PhotoSwipe inte löper ut ur lådan. Som utvecklaren säger:

"PhotoSwipe görs enkelt och snabbt för slutanvändare, inte för utvecklare. Det är inte ett enkelt jQuery-plugin, det krävs åtminstone grundläggande JavaScript-kunskap för att installera.

Men det kan användas tillsammans med andra bibliotek. I denna handledning ska vi titta på hur man använder PhotoSwipe med jQuery. Vi gör hela processen lätt begriplig, även om du inte är välkänd i ren JavaScript.

Låt oss börja.

1. Komma igång

Vi börjar med:

  1. Skapa projektkataloger.
  2. Skapa ett HTML-dokument.
  3. Länkar till jQuery. I den här handledningen ska jag använda jQuery 2.0, vilket bara stöder moderna webbläsare.
  4. Ta tag i kopiorna av PhotoSwipe-biblioteket som innehåller filerna: photoswipe.min.jsphotoswipe-ui-default.min.js (koden som konstruerar PhotoSwipe-gränssnittet), default-skin.cssdefault-skin.pngdefault-skin.svg, ochpreloader.gif.
  5. Ordna filerna i din föredragna katalogorder och länka dem i HTML-filen.

2. Strukturera HTML

HTML-strukturen är den viktigaste delen eftersom det i slutändan kommer att driva hur vi skriver JavaScript. Här antar vi att vi har ett par bilder, enligt följande:

Strand

Data attribut

Bortsett från klassen och Schema attributen (som kommer att hjälpa till med SEO), har vi också lagt till en data-* attribut i ankaretiketten som lägger in bilden. Detta lagrar bilden i full storlek (bredd x höjd).

Mer Markup

Nu lägger vi till den markering som PhotoSwipe kommer att använda för att överlappa hela bilderna. Lägg till detta strax före stängningskroppen, .

 

Vi är alla med HTML, så nu kan vi fortsätta med JavaScript. Som sagt kommer vi att använda jQuery.

3. jQuery

Våra bilder är grupperade inom en div med bild klass. Det kan finnas flera fler bildgrupper på sidan, så vi slår igenom varandra .bild element.

$ ('. bild'). varje (funktion () ); 

detaljer

PhotoSwipe kräver att vi tillhandahåller hela bildkällan tillsammans med dess storlek. För att ta hand om detta skapar vi en funktion som går genom ankerkoden för att hämta dessa detaljer, enligt följande:

varje (funktion () var $ pic = $ (detta), getItems = function () var items = []; $ pic.find ('a'). var $ href = $ (detta) .attr ('href'), $ size = $ (detta) .data ('storlek'). split ('x'), $ width = $ size [0] = $ size [1]; var item = src: $ href, w: $ bredd, h: $ höjd items.push (item);); returnera poster; var items = getItems ();); 

Låt oss bryta ner denna kod nedåt i flera delar:

  1. Vi initierar först med en tom matris in poster = [].
  2. Sedan gick vi igenom varje ankare tagg med .varje() metod.
  3. $ href = $ (detta) .attr ('href') får värdet i href attribut, lagra sökvägen för hela bilden.
  4. $ size = $ (this) .data ('size'). split ('x') kommer att få värdet av datastorlek attribut genom jQuery .data() metod. Vi använder sedan dela()metod för att skilja värdet.
  5. Vi kan få värdet på bredden och höjden separat med: $ width = $ size [0] och $ höjd = $ storlek [1].
  6. Använda tryck() Metod vi samlar all denna information i en Array.

Testa i konsolen

Vi har nu bildkällan och bildstorleken lagrad i objekt variabel. För att verifiera kan du köra variabeln genom console.log () och du bör hitta följande datastruktur i DevTools.

Klick

Därefter binder vi figur element med klick händelse, konstruera en PhotoSwipe-instans, passera objekt tillsammans med konfigurationsalternativen, och slutligen initiera PhotoSwipe.

var $ pswp = $ ('. pswp') [0]; $ pic.on ('klick', 'figur', funktion (händelse) event.preventDefault (); var $ index = $ (detta) .index (); var options = index: $ index, bgOpacity: 0.7, showHideOpacity: true // Initialisera PhotoSwipe var lightBox = ny PhotoSwipe ($ pswp, PhotoSwipeUI_Default, objekt, alternativ); lightBox.init ();); 

Anledningen till att vi använder figur element för att klicka på, snarare än ankerkoden, är så att vi enkelt kan hämta indexet (eller efterföljande ordning). Detta gör att vi kan informera PhotoSwipe om rätt index för att överlappa motsvarande bild.

Slutsats

Vi har just implementerat PhotoSwipe med jQuery. Koden är jämförbart smalare och lättare förståelig än när den skrivs i vanilj JavaScript. 

Nu är du igång, du kan också justera PhotoSwipe med ett handfullt alternativ som tillhandahålls och till och med förinställa bilden så att du kan se hela bilden direkt när du klickar. Jag kommer att lämna stilerna till fantasin eftersom det inte finns några strikta regler för dem.

Jag hoppas att du har lärt dig någonting från den här handledningen och tycker att den är användbar ibland. Glöm inte att kolla in live demo och lämna några frågor eller tankar i kommentarerna!

Ytterligare resurser

  • Komma igång med PhotoSwipe
  • Responsiva bilder med PhotoSwipe
  • 30 dagar att lära dig jQuery
  • Allt du behöver veta om HTML5-data attributet
  • Förbättra din webbplats upptäckbarhet med Semantic Markup