Autor Zpráva
ForestCZE
Profil
Zdravím, mám rád vlastní scripty, v kterých se vyznám, takže jsem se pokusil vytvořit vlastní slider.

HTML:

<div data-foto="1" class="foto"></div>

jQuery:

var $fotky = 3;
        var $dalsi_foto = 0;
        
        setInterval(function(){
            var $aktualni_foto = parseInt($("div.slider div.foto").attr("data-foto"));
            $("div.slider div.foto").fadeOut(500, function(){
                $("div.slider div.foto").html("<img src='layout/img/slider/"+$slider+"/"+$aktualni_foto+".png' width='"+$delka_slideru+"' height='400' alt='Slider "+$aktualni_foto+"' />");
            });
            $("div.slider div.foto").fadeIn(1000);
            
            if($aktualni_foto < $fotky){
                $dalsi_foto = $aktualni_foto+1;
                $("div.slider div.foto").attr("data-foto", $dalsi_foto);
            }else{
                $dalsi_foto = 0;
                $("div.slider div.foto").attr("data-foto", "1");
                
            }
        }, 5000);

Normálně to funguje v pořádku. Načte mi to postupně 3 obrázky, pak se to vrátí a jede to od začátku :)

Jen nechápu ten proces. Když si dám na stránce "Zobrazit prvek" a sleduji hodnotu v proměnné data-foto, tak se to chová nějak takto:

Načte se stránka - data-foto="1" //žádný obrázek

A pak každých 5000ms:
data-foto="2" //načte se první obrázek
data-foto="3" //načte se druhý obrázek
data-foto="1" //načte se třetí obrázek

data-foto="2" //opět první obrázek
...

Co to sakra je? Dokáže mi to někdo vysvětlit a popřípadě říct, zda ten script nemá být jinak? Děkuji moc :)
juriad
Profil
ForestCZE:
Nějak mi uniká význam těch proměnných. Nevidím důvod si něco ukládat do atributů.
Celé bych to udělal mnohem jednodušeji: Živá ukázka

Máš nějaký důvod pojmenovávat proměnné s dolarem na začátku?
ForestCZE
Profil
juriad:
Nějak mi uniká význam těch proměnných. Nevidím důvod si něco ukládat do atributů.

Abych věděl, jaký obrázek je aktuálně načtený a nechal načíst další.

Máš nějaký důvod pojmenovávat proměnné s dolarem na začátku?

Je v tom rozdíl? (z hlediska jQuery)
juriad
Profil
ForestCZE:
Jestli tě zaráží, proč v data-foto je o jedničku vyšší číslo než je aktuálně zobrazená fotka, tak je to z důvodu, že:
1) na 7. řádku nastavíš takovou fotku, která je v data-foto
2) na řádku 12. zvýšíš aktuální fotku (tedy bude o jedna větší než je zobrazená)
3) na 13. řádku to číslo zapíšeš do data-foto (data-foto obsahuje o jedničku vyšší číslo než je číslo zobrazené fotky)
4) a pak se 5 sekund nic neděje; ty se na hodnotu atributu koukáš v tento okamžik.
V data-foto tedy není číslo aktuální fotky, ale číslo následující fotky.

„Máš nějaký důvod pojmenovávat proměnné s dolarem na začátku?“
Je v tom rozdíl? (z hlediska jQuery)
Není, ale jelikož jQuery není nic víc než jedna funkce napsaná v JavaScriptu, měl bys používat jmenné konvence JavaScriptu.

Také bys měl deklarovat proměnné slovem var. Používej var.
ForestCZE
Profil
juriad:
Není, ale jelikož jQuery není nic víc než jedna funkce napsaná v JavaScriptu, měl bys používat jmenné konvence JavaScriptu.

Beru na vědomí a děkuju :)

Také bys měl deklarovat proměnné slovem var. Používej var.

Vždyť mám u všech proměnných var v této ukázce .. nebo ne?
juriad
Profil
ForestCZE:
Vždyť mám u všech proměnných var v této ukázce .. nebo ne?
Máš pravdu, musel jsem si tě splést s někým jiným.
ForestCZE
Profil
juriad:
Abych to shrnul - děkuju za tu ukázku, je super, akorát bych se chtěl zeptat na current = current % count + 1; //co má za význam to %?
juriad
Profil
To je modulo - také známé jako zbytek po dělení.
Je to jednoduchý způsob, jak bez podmínky po dosažení určité hodnoty jí resetovat zpět na nulu.

Ukázka:
Živá ukázka
ForestCZE
Profil
juriad:
Šikovná věc :) ... už jsem si to předělal na webu a všechno šlape, jak má (dodělal jsem si i šipky předchozí a další foto) ... To je tedy vše a ještě jednou děkuji.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0