Texy!, jQuery a Lightbox

Sdílet

Všichni to znáte – kliknete na náhled obrázku a zobrazí se vám na popředí obrázek v plné velikosti. Tento javascript je (asi podle názvu prvního takového skriptu – ovšem můžu se mýlit) obecně znám Lightbox. Pokud používáte Texy!, mohlo by vám jeho zprovonění dělat těžkosti…

Zde a na pdb jsem řešil tento styl zobrazování velkých obrázků z jejich náhledů. Ono je to celkem jednoduché – na stránky si natáhnete javascript nějakého Lighboxu (srovnávací tabulka Lightboxů, výčet 30+ lightboxů a např. pomocí css stylu lightbox u tagu A (který je okolo obrázku náhledu) je vše připraveno:

Cíl

příklad html kódu

<a href="velky-obrazek.png" class="lightbox">
  <img src="nahled-velkeho-obrazku.png">
</a>

živá ukázka

Postup

Zde (a obecně na lsblogu) však používám formátovač textu Texy!, kde sice můžu použít html kód, ale obrázky se definují prostě jinak:

Texy! – jednoduchý obrázek (osvěta)

[* nahled-velkeho-obrazku.png *]
nebo
[* velky-obrazek.png *]

Texy! – náhled ukazující na plný obrázek

[* nahled-velkeho-obrazku.png *]:[* velky-obrazek.png *] .<>

(tečka, menšítko a většítko vše uzavřou do tagu DIV s vycentrovaný obsahem)

což nám Texy! převede na tento html kód

<div style="text-align:center">
    <a href="./velky-obrazek.png" onclick="return !popupImage(this.href)">
         <img src="./nahled-velkeho-obrazku.png" alt="" />
     </a>
</div>

přidání css tříd pomocí jQuery a načtení Lightboxu

Do Texy! kódu by samožřejmě šlo doplnit třídu css lightbox ručně (ačkoli teď nevím jak). Abych tuto operaci nemusel podstupovat při každém novém obrázku/blogpostu, použiju na tento úkon javascript – knihovnu jQuery.

$(document).ready (function() {
    // projdu vsechny odkazy v urcenem tagu
    $(".clanek div a").each(function(){
        // zjistim na co ukazuji
        var targetUrl = $(this).attr("href");
        // pokud ukazuji a obrazky
        if (targetUrl.substr(-3) == "jpg"
            || targetUrl.substr(-3) == "png") {
            // pripadne dodat dalsi pripony
            // pridam tridu lightbox
            $(this).addClass("lightbox");
            // a pro retezeni jeste atribut rel=lightbox
            $(this).attr("rel","lightbox");
        }
    })

    // spustim lightbox
    $(".lightbox").lightbox();
});

Zkrácená verze (z komentářů: thx Kahi)

$(document).ready (function() {

    // pridam patricnym odkazum tridu lighbox a rel lightbox
    $('a[href$=.png], a[href$=.gif], a[href$=.jpg]', '.clanek div').addClass('lightbox').attr('rel', 'lightbox');

    // spustim lightbox
    $(".lightbox").lightbox();

});

(nezkoušeno)

V tomto případě se mi po načtění celé HTML články zkontrolují všechny odkazy (tag A) v elementu s css třídou .clanek. (Já zde mám ještě pod DIV.clanek jeden DIV, tak si to upřesňuji.)
A pokud odkaz vede na obrázek (poslední 3 znaky jsou JPG nebo PNG – možno upravit…), přidá se tomuto tagu A třída lightbox.

To, že přidávám i atribut rel s hodnotou lightbox pak umožní retězit tyto obrázky za sebe – a je tak možné se dostat na další/předchozí přes klik na okraj (pravý=další, levý=předchozí) obrázek v řadě.

dostaneme tento HTML výsledek:

<div style="text-align: center;">
    <a onclick="return !popupImage(this.href)" href="./velky-obrazek.png" class="lightbox" rel="lightbox">
        <img alt="" src="./nahled-velkeho-obrazku.png"/>
    </a>
</div>

použití v praxi

Jak to funguje můžete zkouknout např. na PDB ve článku o čtečce YBook nebo zde na článku o Battle for Wesnoth

Poznámka

Výše napsaný JS kód samozřejmě samostatný a nemá s Texy! nic společného, takže jej můžete použít na jakémkoli webu, kde odkazujete na obrázky a chcete je otevírat v Lighboxu.

Zdroje pro zprovoznění:

tagy: ,
Publikováno: 15.07.2009 00:32
Knedle

Související články

blog comments powered by Disqus
Počet komentářů k tématu: 2

Ten jQuery kód se dá myslím napsat poměrně jednodušeji. $('a[href$=.png], a[href$=.gif], a[href$=.jpg]', '.clanek div').addClass('lightbox').attr('rel', 'lightbox');

Reakce: #2 knedle
#2 knedle

#1 kahi: diky za tuto zkracenou verzi, $= jsem dosud neznal

pridam to do kodu jako zkracenou variantu

přidat komentář
Přidej svůj komentář: