Autor Zpráva
ForestCZE
Profil
Zdravím :) Mám vytvořený slider, ukázka tady. Je ale trochu problém s tou funkcí NaStred.

V té funkci:

1) Zjistím výšku slideru
2) Zjistím výšku obrázku v něm
3) Tyto dvě výšky odečtu a vydělím 2, abych získal polovinu
4) O výslednou hodnotu posunu obrázek ve slideru

Nastavil jsem schválně výpis té hodnoty, aby bylo vidět chování.

V té ukázce vyjde toto:

vyska_sld = 400
vyska_img = 462
stred = (400-462)/2 = -31

To tedy znamená, že by měla funkce nastavit hodnotu top vždy právě na -31. Problém ale je, že se tak stane pouze u prvního obrázku. U dalších je hodnota o 200 vyšší, tedy -231. Z jakého důvodu?

1) Volám tu funkci ve špatnou chvíli?
2) I když je funkce zavolána vícekrát, nepřijde mi, že bych to někde "donutil", aby se to sčítalo nebo něco podobného.
3) Výšky jsou pořád stejné, takže by mělo být jedno, kolikrát je funkce zavolána.

Kde je problém? Děkuji moc předem.
marizikmund
Profil
Skript zjišťoval výšku divu ve chvíli, kdy ve slideru žádný obrázek nebyl, tudíž byla nulová. Trochu jsem ti to upravil, ať zjišťuje tu informaci líp.
ForestCZE
Profil
marizikmund:
Díky za tuto pomoc.

Ale nechápu, jak jsi to myslel, že skript zjišťoval výšku ve chvíli, kdy tam obrázek nebyl.

1) Na 4. řádku nastavím obrázek a až na 6. řádku volám funkci poprvé. Takže podle mě obr. nastaven je, než se spustí funkce poprvé
2) Než jsi odepsal, tak jsem ještě zkoušel a řekl bych, že je chyba tady:

var stred = (vyska_sld-vyska_img)/2;

Nevím, třeba ty závorky nebo tak, jelikož když to upravím např. takto:

var odecist = vyska_sld-vyska_img;
var stred = odecist/2;

Tak už mi střed vyhodí hodnotu pokaždé -31. Moc to nechápu...

EDIT: Tak ne, blbne to i tak. Nevím, jak je možné, že se mi to předtím povedlo xD

EDIT2: Aha, na začátku je výška slideru 400 a pak už pořád 0. Ale proč? To je blbost.
Keeehi
Profil
ForestCZE:
EDIT2: Aha, na začátku je výška slideru 400 a pak už pořád 0. Ale proč? To je blbost.
Kód jsem nezkoumal jelikož nejsem na vhodném zařízení ale můj osobní tip je, že zmeníš obrázek a hned potom se snažíš zjistit výšku. Problém bude v tom, že za tu milisekundu se ten obrázek prostě nemá šanci načíst a tudíž v té chvíli je jeho výška neznámá => 0.

Buď můžeš počkat až se obrázek načte a pak teprve zjišťovat výšku, nebo si ty obrázky dopředu prednačíst no a nebo nejlepší řešení je to vyřešit čistě pomocí CSS a úplně odstranit javascript. Ano, vertikální centrování není nejlehčí úloha ale přesto je stále řešitelná.
ForestCZE
Profil
Keeehi:
Buď můžeš počkat až se obrázek načte“ ....

To mě trošku nakoplo a vyřešil jsem to takto:

$("div.slider img").load(function(){
  NaStred();
});

To by hádám šlo :)
Keeehi
Profil
ForestCZE [#5]:
Na jQuery nejsem odborník ale load normálně slouží pro ajax a má hlavně úplně jiné rozhraní. Jsem překvapený jestliže ti to funguje. Standardní event v javascriptu je onload. V jQuery je ještě možný alternativní zápis jako .on('load', function ...)
Chamurappi
Profil
Reaguji na Keeehiho:
ale load normálně slouží pro ajax a má hlavně úplně jiné rozhraní
Ono se jQuery rozhoduje podle typů argumentů mezi AJAXem a událostí onload. Takže když kód vypadá jako $("#ídéčko").load(proměnná), kolemjdoucí pozorovatel může jen hádat, jestli se zpracovává událost, nebo jestli se něco stahuje…


Reaguji na ForestCZE:
Proč ne rovnou $("div.slider img").load(NaStred)?
ForestCZE
Profil
Chamurappi:
Proč ne rovnou $("div.slider img").load(NaStred)?

To byl jenom příklad zápisu, že takhle zajistím, aby to zjišťovalo výšku, až ve chvíli, kdy to bude načtené. Jsem totiž ten load strčil přímo do té funkce pak :)

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: