Highslide JS - Fotogalerie

27. 8. 2010 - Filip Hladík – Chief Web Developer

FG seriál na téma: Highslide


Zobrazování fotek na webu je naprosto běžnou záležitostí. Jak takovou galerii vytvořit a nastavit - o tom bude tento článek.

Fotogalerie, slideshow a základní ovládací prvky

Rozdělení jednotlivých fotogalerií v rámci stránky

Highslide v základním nastavení načte všechny obrázky, které jsou označeny jako highslide (buď pomocí unobtrusive metody - atribut rel nebo hs.expand) a vytvoří z nich jednu velkou galerii. Mezi jednotlivými fotkami se lze přepínat pomocí šipek na klávesnici, prostě jeden Highslide obrázek „vidí“ na ty další. Pokud chceme fotky rozdělit, mít například skupinu fotek z fotogalerie a fotky z článku zvlášť, můžeme tak učinit pomocí parametru slideshowGroup. Toto nastavení se provádí u příslušných thumnbailů:

  <a href="img.jpg" onclick="return hs.expand(this, { slideshowGroup: 'nazev-skupiny' } )">thumbnail</a>

Totéž můžeme samozřejmě zapsat pomocí proměnné (jednodušší zápis):

  var optGallery = {
    slideshowGroup: 'nazev-skupiny'
  }
  <a href="img.jpg" onclick="return hs.expand(this, optGallery )">thumbnail</a>
  <a href="img2.jpg" onclick="return hs.expand(this, optGallery )">thumbnail2</a>

Hotový příklad dvou fotogalerií, které jsou na sobě nezávislé - při procházení galerie pomocí šipek „nezabloudíme“ z jedné galerie do druhé.

Pokud používáme unobtrusive metodu (tedy metodu, kdy u thumbnailů nepoužijeme onclick, ale atribut rel), lze jednotlivé galerie také nastavit. Mějme galerie gallery1 a gallery2:

  <div class="gallery1">
    <a href="img.jpg" rel="highslide">thumbnail</a>
    <a href="img2.jpg" rel="highslide">thumbnail2</a>
  </div>
  <div class="gallery2">
    <a href="img3.jpg" rel="highslide">thumbnail3</a>
    <a href="img4.jpg" rel="highslide">thumbnail4</a>
  </div> 

Pomocí JavaScriptové funkce onSetClickEvent přiřadíme jednotlivým thumbnailům slideshowGroup a zachováme tím „čistý“ kód. Hotový příklad.

Jestliže u některých obrázků (nebo všech) nespecifikujeme parametr slideshowGroup, chovají se jako samostatná skupina. V praxi to znamená, že můžeme fotografie v článku (v toku textu) nechat bez parametru a fotkám v galerii pod článkem jakýmkoliv způsobem parametr přiřadit. Výsledkem budou dvě oddělené galerie.

Přidání slideshow a ovládacích prvků

Highslide umí z fotogalerie (ze jedné na stránce nebo i ze všech) udělat slideshow. Slideshow automaticky zobrazuje fotky jednu po druhé ve zvoleném časovém intervalu. Navíc umí naprosto jednoduše přidat fotogalerii vestavěné ovládání - pro ovládací prvky má vlastní overlay. Toto vše zajišťuje funkce hs.addSlideshow(). Jejím parametrem je seznam vlastností slideshow. Jednou z vlastností je i definice vrstvy s ovládacími prvky.

  • slideshowGroup
    Slideshow lze aktivovat pouze pro určitou slideshowGroup, více takových skupin nebo vynecháním tohoto parametru pro celou stránku nezávisle na slideshowGroup. Hodnotou parametru je pole, jehož prvky jsou jména slideshowGroups: př. ["gallery-1", "gallery-2"].
  • interval
    Časový interval (integer) v milisekundách. Čas mezi jednotlivým přepínáním obrázku v případě, že použijeme automatickou slideshow (zapneme Play v ovládacích prvcích slideshow).
  • repeat
    True/false. Pokud dojede automatická slideshow na konec, má se vrátit na začátek a zobrazovat fotky znovu od začátku?
  • useControls
    True/false. Parametr, který určuje, jestli se má vyrenderovat vrstva (overlay) s ovládáním slideshow.
  • fixedControls
    True / false / 'fit'. Pokud je parametr true, zůstávají ovládací prvky při přecházení mezi obrázky na svém místě. Tzn. lze projít galerii s klikáním na šipku doprava bez pohnutí myši. Jediné, co se přizpůsobuje, je obrázek. Nově otevřený obrázek se umístí tak, aby se ovládání nemuselo pohnout. Pokud je parametr false, obrázek se zarovnává podle svého nastavení (align) a ovládací prvky cestují. S nastavenou hodnotou 'fit' se slideshow chová stejně, jako v případě true, ale bere se ohled na to, aby obrázek neutekl z viewportu Prohlížeče.
  • overlayOptions
    Definice vlastností ovládacích prvků. Vlastnosti jsou stejné jako v případě hs.registerOverlay(), kromě těchto: overlayId, thumbnailId, slideshowGroup a useOnHtml.
  • thumbstrip
    Jiná varianta ovládání a Navigace během slideshow. Všechny thumbnaily dané galerie jsou zkopírovány a umístěny do pruhu thumbnailů (thumbstrip). Tato možnost bude uvedena a ukázána na konci tohoto článku.

Hotový příklad velice jednoduché fotogalerie. Nelíbí se při přecházení mezi fotkami to, že se fotka nejprve zmenší a druhá se zas roztáhne? Je možnost globálně pro celý web nastavit vlastnost hs.transitions. Jednoduchým nastavením lze dosáhnout efektu, při kterém zůstane expander otevřený a vymění se pouze obrázky. Případné nesrovnalosti v rozměrech a pozici obrázku se řeší plynule (tzv. crossfade) - ukázáno na stejném příkladu, pouze dodána vlastnost hs.transitions.

Definice více galerií na stránce

Málokdy asi budeme chtít na jedné stránce dvě různě vypadající fotogalerie, ale i na tento případ Highslide myslí a není problém takový stav připravit. V dalším příkladu jsou dvě galerie, každá má jinou hodnotu parametru slideshowGroup a podle tohoto parametru je k nim připojena příslušna slideShow.

Další zobrazení ovládacích prvků slideshow

Highslide umožňuje alternativní zobrazení ovládacích prvků. Samozřejmě není problém nadefinovat pomocí stylů vlastní ovládání. Následující ukázka definuje dvě galerie. Jedna má ovládání v headeru expandovaného obrázku (používá třídu controls-in-heading). Druhá používá třídu text-controls, která nachází uplatnění v galeriích s fullscreen thumbstripem (níže). Samostatnému použití bez thumbstripu ale nic nebrání.

Thumbstrips (pruh thumbnailů)

Co je to thumbstrip. Thumbstrip je vlastně druh vrstvy (overlay), který je po otevření expanderu naplněn thumbnaily dané galerie. Thumbnaily jsou do této vrstvy zkopírovány z dané stránky. Jelikož se jedná o vrstvu, má stejné vlastnosti, jako ostatní vrstvy (viz. registerOverlay). Navíc má ještě vlastnost mode, ta může nabývat hodnot vertical, horizontal a float. Thumbstrip se pak podle tohoto nastavení vytvoří jako vertikální nebo horizontální pruh, který může být napozicován doleva, doprava, nahoru, dolu a to vzhledem k viewportu, tak i vzhledem k expanderu. Pokud použijeme hodnotu float, thumbnaily se srovnají vedle sebe a v případě nedostatku prostoru se zalomí. Narozdíl od předchozích dvou hodnot, kdy se vygeneruje mininavigace v rámci thumbstripu pro posun mezi fotkami. Jednoduchá definice thumbstripu vypadá asi takto (horizontální, pozice dolu relativně k viewportu):

  hs.addSlideshow({
    slideshowGroup: ["th1"],
    interval: 5000,
    useControls: true,
    fixedControls: 'fit',
    overlayOptions: {
      className: 'text-controls',
      position: 'bottom center',
      relativeTo: 'viewport',
      offsetY: -60
    },
    thumbstrip: {
      position: 'bottom center',
      mode: 'horizontal',
      relativeTo: 'viewport'
    }
  });

Ovládací prvky s třídou text-controls nám vytvoří stejnou podobu ovládání, jako v příkladu výše. Vlastnost offsetY zajistí odsazení od spodního okraje - uvolní se tak místo pro thumbstrip, který je v tomto případě horizontální, umístěný na středu při spodním okraji viewportu. Příklad horizontálního a vertikálního thumbstripu na samostatné stránce (zobrazte si zdroj stránky).

Jeden takový osobní postřeh ohledně velikosti thumbnailů a jejich kopií v thumbstripu. Thumbstrip upravuje velikost duplikátů pomocí stylů. Při použití horizontálního modu thumbstripu je velikost nastavena na 40px výšku a šířka je na auto. Tzn. si ji to dopočítá. Při použití vertikálního modu v default nastavení pouze max-width: 60px; a výška není nijak ošetřena. Highslide počítá s tím, že u thumbnailů ve stránce nejsou uvedeny rozměry. Pokud tomu tak je, duplikované thumbnaily jsou v pořádku. Pokud ale velikost thumbnailů zadaná je, výška duplikovaného thumbnailu si toto nastavení přebírá. Kombinace s max-width = paskvil. Tento neduh jsem vyřešil přidáním tohoto řádku do svých stylů. Jedná se o úpravu, která je analogická k úpravě v případě horizontálního thumbstripu:

	.highslide-thumbstrip-vertical img { height: auto; }

Thumbstrip pozicovaný relativně k expanderu

Pokud pozicujeme thumbstrip k expanderu, ne k viewportu jako v předchozím případě, thumbstrip rozšíří velikost expanderu. V tomto případě je doporučeno použít vlasnost hs.useBox - thumbstrip nám při Navigaci mezi jednotlivými obrázky nebude utíkat pod kurzorem. V tomto případě také není vhodné (možná je to skoro až zbytečné) používat control bar v podobě text-controls. Ideální je návrat k původní podobě kontrolních prvků. Příklad používá toto nastavení:

  var th1 = {
    slideshowGroup: 'th1',
    outlineType: 'glossy-dark',
    wrapperClassName: 'dark',
    useBox: true,
    width: 600,
    height: 400,
    thumbnailId: 'main-thumbnail'
  };

  hs.addSlideshow({
    slideshowGroup: ["th1"],
    interval: 5000,
    useControls: true,
    fixedControls: 'fit',
    overlayOptions: {
      position: 'bottom center',
      hideOnMouseOut: true,
      opacity: 0.6
    },
    thumbstrip: {
      position: 'above',
      mode: 'horizontal',
      relativeTo: 'expander'
    }
  });

Krátké vysvětlení: Všechny thumbnaily s vlastnostmi definovanými pomocí proměnné th1 budou mít černý lesklý okraj, budou se otevírat v boxu o velikosti 600x400px a jsou „schovány“ za thumbnailem s id main-thumbnail. Ten jediný je vidět, zbytek je schovaný pomocí stylů. Thumbstrip je umístěný relativně k expanderu, nad obrázkem a má horizontální podobu. Pokud je thumbnailů více, než se vejde do expanderu, automaticky se vygenerují šipky doleva a doprava, které slouží jako Navigace v rámci thumbstripu - v příkladu ukázáno.

Thumbstrip umístěný vedle obrázků v rámci expanderu

Pokud použijeme při vytváření hodnotu float (vlastnost mode), thumbnaily se srovnají v rámci boxu (hs.useBox) a v případě potřeby se zalomí. Pozicování takového thumbstripu by pak mělo nejlépe směřovat do levého nebo pravého panelu (position: 'leftpanel'). I v tomto nastavení existuje stejný problém, jako v případě vertikálního thumbstripu - a to velikost kopírovaných thumbnailů. Tentokrát se reguluje výška a šířka zůstává neošetřena. Vyřešit lze tímto způsobem:

  .highslide-thumbstrip-float img { height: auto; }

Hotový příklad

Galerie s thumbstripem „vestavěná“ ve stránce

S Highslide jdou dělat doslova psí kusy. Příkladem budiž galerie vestavěná ve stránce. Ve skutečnosti jde o galerii, která je stejná jako všechny ostatní, jen ji po načtení stránky rovnou otevřeme, odstraníme nevhodné ovládací prvky (tlačítko na zavření, maximalizování obrázku), upravíme styly, upravíme default chování různých kliků (klik na obrázek znamená zavřít - potřebujeme vypnout / předělat, je potřeba vypnout přetahování obrázků). Pro lepší přehled doporučuji zdrojový kód tohoto příkladu.

Seriál

Další články autora:

Všechny moje články


Potřebujete...

... profesionální webovou prezentaci?

Realizujeme firemní weby, rozsáhlé portály i stručné microsites.

  • Analýzy a testování
  • Špičkový design
  • Tvorba struktury, textů nebo videa
  • Systém pro správu obsahu

Více informací

... efektivně komunikovat uvnitř firmy?

Komplexně zajistíme efektivní intranetové řešení.

  • Návrh business procesů
  • Systém pro správu obsahu
  • Personalizovaný přístup
  • Integrace s dalšími systémy

Více informací

... úspěšnou on-line kampaň?

Proměníme návštěvníky internetu v zákazníky.

  • Microsites a hry
  • E-mail a mobilní marketing
  • Videa pro internet
  • Multimediální CD a DVD

Více informací

FG Tipy

Internet už používá 53 % české populace.

Získejte mezi nimi nové zákazníky - nabídka je široká!

Zkušenost s nákupem on-line má více než čtvrtina Čechů starších 15 let.

Prodávejte na internetu - přes weby a portály!

3 ze 4 uživatelů se díky vyhledávačům seznamují s novými značkami. Většina značku považuje za kvalitní a významnou, pokud ji vyhledávač uvede na přední pozici.

Vyzkoušejte on-line marketing!

Reklamní hry, které mají tématickou návaznost na značku, výrazně pomáhají utvářet pozitivní vztah se zákazníky.

Získejte si náklonnost internetových uživatelů originální on-line kampaní!

Způsob čtení z webu je specifický. Internetový čtenář je nedočkavý a text vstřebává nesouvisle.

Nepodceňujte to - objednejte si profesionální weby a portály!

Mobilní telefon používá 89 % obyvatel ČR ve věku nad 15 let.

Vyzkoušejte mobilní marketing!

Názor na web si uživatel utvoří během první vteřiny návštěvy. Do 30 vteřin odejde, pokud není spokojen. Ve 4 případech z 10 se už nevrátí.

Objednejte si profesionální webová řešení!

Polovina aktivních uživatelů před nákupem běžně hledá informace o produktu na internetu.

Udržujte svůj web aktuální - pomocí Edee CMS!

Internet patří mezi nejvýznamnější zdroje informací o produktech a značkách. Dle mnoha výzkumů jej uživatelé v tomto směru řadí už na 2. místo.

Internet vám získá nové zákazníky - objednejte si profesionální web!

Správná vnitrofiremní komunikace nejen podporuje týmovost a výkonnost zaměstnanců. Výrazně ovlivňuje úspěch celé společnosti.

Komunikujte se zaměstnanci rychle, efektivně a zábavně - pomocí intranetu!


Odběr článků

odebírat přes RSS

Tiskové zprávy

Tiskové zprávy o nás a našich projektech.

Čtěte

2