Autor Zpráva
jso
Profil *
Zdravím,

řeším problém při aktualizaci (načítání) obsahu bloku (poslední blok na stránce formou záložek) pomocí AJAXu (jQuery).
Situace:
Uživatel scroluje stránku úplně dolů k danému bloku (ten má nějakou výšku, jelikož jsou zde již nějaká data). Pokud vyvolá načtení jiných dat (vyprázdní se tento blok a nahradí loaderem), prohlížeč posune obrazovku zároveň se spodní hranou, ale při načtení se již nevrátí na pozici, ve které byl před načtením (zůstane v pozici, kdy byl ajax blok prázdný s loaderem), což je právě to, co potřebuji.

Tuto situaci bych nechtěl řešit pevnou výškou ajax bloku za pomoci overflow.

Bohužel nemohu zpřístupnit živou ukázku. Pokud by někdo znal řešení, jak pomocí js vrátit prohlížeč do stavu před načítáním nového obsahu, byl bych rád.

Děkuji.
jso
Profil *
Řešení nejspíše neexistuje. Vyřešil jsem to tedy divem (ajax loader), který se zobrazuje vždy uprostřed okna prohlížeče a mízí ve chvíli naplnění ajaxového bloku daty.

Nejspíše se tedy může téma uzavřít.
Chamurappi
Profil
Reaguji na jsa:
Řešení nejspíše neexistuje.
Existuje a je poměrně snadné.

při načtení se již nevrátí na pozici, ve které byl před načtením
Pozici můžeš zjisit/nastavit ve vlastnosti scrollTop u <body> či u <html>. Vlastně u čehokoliv, v čem se roluje.
jso
Profil *
Chamurappi
Existuje a je poměrně snadné.
Neřekl bych pro splnění všech podmínek.

Pozici můžeš zjisit/nastavit ve vlastnosti scrollTop u <body> či u <html>. Vlastně u čehokoliv, v čem se roluje.
Ano, toto využívám u centrovaného ajax loaderu. Nicméně, pokud mám blok, do kterého načítám data a je umístěn na spodní straně okna prohlížeče, nedokázal jsem splnit to, že do datového bloku umístím loader, načtu data a až poté je zobrazím v onom bloku bez toho, aby prohlížeč vyjel na pozici spodní hrany v okamžiku, kdy tam umístím loader. Toto vyřešit nelze (jedině zobrazit nějaký pomocný div vedle ajax bloku s výškou již načtených dat, ovšem pak loader nemá smysl).
Chamurappi
Profil
Reaguji na jsa:
Asi nerozumím. Prosím o odkaz na živou ukázku.

až poté je zobrazím v onom bloku bez toho, aby prohlížeč vyjel na pozici spodní hrany v okamžiku, kdy tam umístím loader
To pomocí scrollTop vyřešit nejde…

ale při načtení se již nevrátí na pozici, ve které byl před načtením (zůstane v pozici, kdy byl ajax blok prázdný s loaderem)
… ale tohle ano. Můžeš se kdykoliv vrátit na jakoukoliv pozici. Nebo ne? Proč ne?
jso
Profil *
Chamurappi
Asi nerozumím. Prosím o odkaz na živou ukázku.
Bohužel, živou ukázku vystavit nemohu.

To pomocí scrollTop vyřešit nejde…
Ano, toto ne. Myslel jsem ten vycentrovaný ajax loader.

… ale tohle ano. Můžeš se kdykoliv vrátit na jakoukoliv pozici. Nebo ne? Proč ne?
Protože se ten div nejdříve smrskne, jelikož ten ajax loader je mnohem menší než data v něm. Poté, co se do ajax bloku vloží data, jej mohu vrátit zpět, ovšem to problikne (posune se nahoru a zase dolů).

Mohlo mě to napadnout dříve, že to nelze. Nicméně ajax loader v podobě zobrazeného centrovaného prvku to řeší. Na to ukázku mám.
jso
Profil *
pardón, můžeš ukázku změnit na ukázku http://www.epesi.org/demo/ a tento příspěvek odstranit?

Děkuji
Chamurappi
Profil
Reaguji na jsa:
Můžeš ta stará data jen zneviditelnit pomocí „visibility: hidden“, nic se nesmrskne a až dorazí nová data, přepíšeš jimi ta stará a neviditelnost zrušíš.
jso
Profil *
Chamurappi
Můžeš ta stará data jen zneviditelnit pomocí „visibility: hidden“
visibility: hidden != display: none? Že by to bylo tím? To mi ani neříkej, celé jsem to už překopal. I když, stejně teď se mi to líbí více :)
Chamurappi
Profil
Reaguji na jsa:
visibility: hidden != display: none?
Ano. Viz visibility a display.

I když, stejně teď se mi to líbí více :)
Fakt? Mně připadá nejjednodušší nastavit <div>u, kam se právě načítá nový obsah, třídu. Je to jeden řádek v JS (respektive dva, když počítám i to její pozdější zrušení) a o zbytek se postará CSS:
.zrovna-nacitame { background: url('loading.gif') 50% 50% no-repeat }
.zrovna-nacitame * { visibility: hidden !important }
jso
Profil *
Chamurappi
Myslel jsem z grafického hlediska.

Přesto 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: