ugrás a tartalomhoz

létezik-e megbízható html preloader?

dog · 2007. Nov. 6. (K), 01.26
Sziasztok. Ajaxos accordion menüt szeretnék használni, konkrétan a spry-ost, amit a DW generál, de ez mindegy is, mert kipróbáltam többfélét, mootools stb. A gond velük az, hogy amíg nem töltődik le a css és a js, vagyis nem áll össze az oldal, addig az egész accordiont kinyitva mutatja a böngésző. Ezt szeretném elkerülni, és arra gondoltam, egy pár másodperc erejéig valami placeholdert töltök be abba a divbe. Kivitelezhető ez az ötlet?
 
1

szerintem nem kell tulbonyolitani

ksgy · 2007. Nov. 6. (K), 01.51
a legegyszerubbnek en ezt tartom: css-bol alapbol display: none/visibility: hidden az egesznek, vagy csak az elemeknek, es ha lejott a js is es a css is, lefutott minden onload script, oda a vegebe bele egy ismet lathatova tevo kis js kod ;)
2

És ha nincs js?

N0r3i · 2007. Nov. 6. (K), 08.45
Nekem is hasonló problémám van, de mégsem tüntetem el CSS-ből, mert mi van, ha nincs JS engedélyezve? Akkor sajnos úgy marad elrejtve az egész...
Vagy van erre valami jó megoldás? <noscript>-es bűvészkedés?
3

AJAX

Max Logan · 2007. Nov. 6. (K), 09.54
Lehet én értettem félre, hogy miről is van szó, de ha egy AJAX-os menüről beszélünk, akkor már régen rossz, ha a JS nincsen engedélyezve ...
4

Script

janoszen · 2007. Nov. 6. (K), 15.02
A body legelejére egy script-ből adott display:none szerintem, tökéletesen megteszi.
5

Script helye

Balogh Tibor · 2007. Nov. 6. (K), 17.02
Inkább a body végére, ha a script a body elején van, mivel a script is egy html elem, lehet mikor fut, még nincs betöltve vagy felépítve a kezelni kívánt elem.
6

Body

janoszen · 2007. Nov. 6. (K), 19.41
Magát a bodyt rejtheted el addig amíg tölt. :D
7

CSS stílus módosítása

Adam · 2007. Nov. 7. (Sze), 00.38
Én inkább JSből hoznék létre az oldal futásának elindulásakor egy CSSRule-t, hogy a menük display:none;-nal jelenjenek meg, majd a CSS/akármi betöltése után törölném ezt a szabályt.
8

Akár...

janoszen · 2007. Nov. 7. (Sze), 08.35
Nyilván, innen már a fantáziára van bízva, hogy mit csináljon az ominózus JavaScript, de itt nyilván figyelembe kell venni a lassan töltődő képeket is.

Egyébként én nem vagyok a HTML preloaderek híve, jól kell megírni a HTML-t és akkor nincs baj, a képek majd szépen lassan becsöpögnek, de mivel ugye meg van adva a méret, ezért nem fog szerkezeti változást okozni. :)
9

amiért jobb

Hodicska Gergely · 2007. Nov. 7. (Sze), 10.47
Ádám megoldása azért ötletes, mert ha a JS-ből eltűntetni szeretnéd a különböző blokkokat, akkor ahhoz azoknak már léteznük kell a DOM fában, amit a body tag utáni JS esetén még nem adott, és max trükközni lehet (vagy YUI tudja alapból), hogy folyamatosan figyeled, hogy van-e ilyen blokk, és becsukod őket.

Ezzel szemben CSS rule-t simán létre tudsz hozni, és amikor az eltüntetendő elemek rendelésre kerülnek, akkor már emiatt a rule miatt nem fognak látszani.

Egyébként én nem vagyok a HTML preloaderek híve, jól kell megírni a HTML-t és akkor nincs baj
Ebben az esetben nem tudod "jól" megírni. Van egy listád, amiből JS esetén azt szeretnéd, hogy mindig csak egy pont látszódjon, de szeretnéd ezt diszkrét JS-sel megoldani.


Üdv,
Felhő
10

A script is egy html elem

Balogh Tibor · 2007. Nov. 7. (Sze), 12.47
ha a JS-ből eltűntetni szeretnéd a különböző blokkokat, akkor ahhoz azoknak már léteznük kell a DOM fában, amit a body tag utáni JS esetén még nem adot

Akkor kell figyelni egy elem létezését/nem létezését vagy az oldal betöltődését/felépítettségét, ha a script elem pl. a head részben van.

Ha a body részben szerepel a script tag, akkor az előtte lévő elemek értelemszerűen már elérhetők, mivel a script tag által jelölt html elem is a oldal része.

Ezért biztos az, hogy bárhol is van a script, amikor fut, a html elem már létezik és elérhető, például ellenőrzéseket lehet rajta végezni.
11

nem egészen

Hodicska Gergely · 2007. Nov. 7. (Sze), 16.00
Először is logikailag: a pontokat eltüntető JS kód nem lehet a pontok után, mert pont azt szeretnénk elérni, hogy villanjanak be. Pont az lenne a cél, hogy JS-sel bíró böngésző esetében úgy tűnjön, mintha eleve bezárva lennének az éppen nem megjelenített részek. Tehát az elrejtendő HTML kód előtt kéne valamiJS hack, hogy lehetőleg meg se jelenjenek.

Ha a body részben szerepel a script tag, akkor az előtte lévő elemek értelemszerűen már elérhetők, mivel a script tag által jelölt html elem is a oldal része.
Ez így biztosan nen így van. Az script tagben lévő kód nem onloadra fog lefutni, hanem amilyen gyorsan csak tud. Például sima script.aculo.us-os oncomplete scriptet is az input tag mögé kellet beszúrjak, mert ellenkező esetben előfordult, hogy az input elemhez tartozó objektum még nem létezett. De msáhol is futottam már olyan időzitési parába, ahol az segített, ha a JS kódot egy setInterval segítségével futtatam le, és csak így működött (ez inkább IE alatt :)).


Üdv,
Felhő
12

nem egészen

Balogh Tibor · 2007. Nov. 7. (Sze), 16.20
a pontokat eltüntető JS kód nem lehet a pontok után, mert pont azt szeretnénk elérni, hogy villanjanak be

Az majdhogynem mindegy hogy hol van. A lényeg az, hogy a JS minél előbb eltűntesse azt, ami egyébként megjelenne.
1.) Ha a script elem előbb szerepel, mint az eltűntetendő elem(ek), akkor figyelni kell, hogy mikor épül fel az elem. Akkor kell futtatni a scriptet.
2.) Ha az elem(ek) után szerepel a script, akkor mivel ő is egy html elem, a fában az előtte lévő elemek elérhetők.

   <div id="bar">...</div>
   <script type="text/javascript">
      document.getElementById("bar").style.display = "none";
   </script>
Attól, hogy a javascript eléri az elemet, még nem következik, hogy az elemet a böngésző ki is rajzolta.

Ez így biztosan nen így van. Az script tagben lévő kód nem onloadra fog lefutni, hanem amilyen gyorsan csak tud. Például sima script.aculo.us-os oncomplete scriptet is az input tag mögé kellet beszúrjak, mert ellenkező esetben előfordult, hogy az input elemhez tartozó objektum még nem létezett.

Akkor jól van, mert én is ezt írtam. :) Az előtte lévő elemeket éri el.
15

nem szeretnék ebből flame-et

Hodicska Gergely · 2007. Nov. 7. (Sze), 17.03
Az majdhogynem mindegy hogy hol van. A lényeg az, hogy a JS minél előbb eltűntesse azt, ami egyébként megjelenne.
Egyik esetben rögtön a body-nál létrehozol egy rule-t, aminek hatására jó esetben mire az elemhez kerül a feldolgozás, az már meg sem fog jelenni. Második esetben megjelenik az elem, majd gyorsan eltünteted. Számomra egyértelmű, hogy az első megoldás jobb (persze ki kell próbálni, lehet, hogy a gyakorlat nem ezt igazolja).

Ha az elem(ek) után szerepel a script, akkor mivel ő is egy html elem, a fában az előtte lévő elemek elérhetők. Akkor jól van, mert én is ezt írtam. :) Az előtte lévő elemeket éri el.
Kb. erre vonatkozott a második mondatom, hogy nem feltétlenül van így. Nem néztem utána, de szerintem ez szabvány szinten nincs garantálva, és szívtam is már ilyen miatt.


Üdv,
Felhő
16

nem szeretnék ebből flame-et

Balogh Tibor · 2007. Nov. 8. (Cs), 11.11
Akkor ne legyen.
Az első bekezdésből kiderül, hogy az a harmadik eset. Ugye az ami a hozzászólásom után jött, hogy JS-ből gyártod az elemeket.
13

re

dog · 2007. Nov. 7. (Sze), 16.34
Köszi a válaszokat meg az ötleteket. Az, hogy ki van nyitva az accordion az oldal betöltésekor, sajnos nem a betöltendő képek mérete miatt van, akkor is ez történik, ha tök üres. Az a lehetőség, hogy a javascript nincs engedélyezve, az én esetemben igazán nem számít, arról a pár userről szívesen lemondok, mivel ez egy kis saját oldal lesz.
De azt nem vágom, honnan tudom meg, hogy mikor jött le minden. Flashban le tudom kérdezni, de js-ben? Vagy csak vmi timer funkciót kell beiktatani, ami pár másodperc után visszaállítja a div láthatóságát?
Miután a dizájnerek táborát erősítem, bizonyos dolgok elég homályosak a kódolást illetően.
14

bár most lehet, hogy hülyeséget kérdeztem

dog · 2007. Nov. 7. (Sze), 16.38
ha mondjuk a html végében van a kód, ami visszaállítja a visibility-t és a css vagy a js valamilyen okból még mindig nincs lent, mire a html-t beolvassa a böngésző, akkor ugyanott tartok, nem?