ugrás a tartalomhoz

offsetHeight és offsetWidth

whiteman0524 · 2009. Aug. 29. (Szo), 21.25
Üdv mindenkinek!

Van egy nagyon idegesítő problémám. Szóval csináltam magamnak kis lenyíló listákat JavaScript-tel. Olyanokat mint a HTML <select> eleme, de azért nem azzal mert az nem tetszett nekem.(Tudom hogy CSS-sel lehet alakítani azt is, de az se volt jó megoldás) Szóval alapvetően vannak gombjaim, melyekre kattintva előugranak ezek a listák. Ezeket a listákat előre beszúrtam a HTML dokumentumba csak a display értéküket CSS-ben "none" -ra állítottam ezért nem látszanak. A script azt csinálja, hogy megkeresi az x és y koordinátát ahonnan a lista gombja kezdődik és ahhoz viszonyítva (alatta) jeleníti meg a listát.(Ez azért jó, mert a gombokat akárhova áthelyezhetem a listák "követni fogják" őket). Nah ez volt a bemelegítő csak hogy tisztában legyen mindenki hogy miért kell nekem az ami kéne :-)

Szóval ezek a listák ugye position: absulute; - helyzetmegadásúak, hogy takarják az alattuk levő tartalmat. Egyébként hibátlanul működnek, ezekkel nincs baj. Viszont én szeretnék alájuk "árnyékot" is, hogy jobban nézzenek ki :-) És ezzel van a bajom. A listáimnak nincsen megadva a magasságuk és a szélességük, hanem csak akkorák amekkora a tartalmuk. Így ha azt megváltoztatom nem kell ezekkel az értékekkel bajlódnom. Az árnyékot úgy képzeltem el, hogy egy <div id='lista_arnyek'></div> elemmel valósítom meg, aminek a helyzete szintén position: absolute; lesz, és z-index értéke 1 -el kisebb lesz a listákénél, mivel alájuk kéne kerülnie. (és mondjuk szürke színű lesz de ez most lényegtelen) Idáig minden működik is, csak az a baj hogy a magasságát és a szélességét nem tudom hozzáigazítani a listák dinamikus magasságához és szélességéhez. Tudom hogy van az object.offsetHeight és offsetWidth tulajdonság de ezek sajnos 0 -át adnak vissza mikor lekérdezem velük a lista magasságát és szélességét, és azt nem értem hogy miért ? Ha valaki tudja a megoldást akkor szivesen várom, és a segítséget előre is köszönöm :-) (meg bocs a hosszú problémáért :D )
 
1

google?

gex · 2009. Aug. 29. (Szo), 22.02
google megvolt? ott lehet ilyeneket találni:
It looks like you are trying to get the offset size of an element whose style.display is 'none'.

offsets are figured from the rendered size of an element- the space it takes up in the browser window. If the display is none, it has no offset size, or 0.

ha nem ez a problémád akkor bemásolhatnál valami kódot/linket.
2

Position: relative

Poetro · 2009. Aug. 29. (Szo), 22.08
A szülő elemnek adsz positition: relative, és az elemeket ahhoz képest rakod positition: absolute-ba. A szélességet, és magasságot pedig outerWidth és outerHeight és nem offsetWidth / offsetHeight tulajdonságokat kell lekérdenzi.
3

lehet hogy nem jquery

gex · 2009. Aug. 29. (Szo), 22.13
az outerwidth ha jól tudom a window elem egyik tulajdonsága. szerintem te a jquery-s megvalósításra gondoltál, de egy szóval sem írta hogy jquery-t használna.
4

Igaz

Poetro · 2009. Aug. 29. (Szo), 22.26
Túl régóta jQuery-zem :|. Elméletileg tényleg az offsetWidth és offsetHeight lehet a megoldás a megfelelő DOM elemre. De persze ez csak látható elemekre működik.
5

Igen..

whiteman0524 · 2009. Aug. 29. (Szo), 22.51
Nem JQuery-t használok egyenlőre..bár azt is tervezem, de még nem most :-) Az Első hozzászólás jó ötletnek tűnik egyébként, mert mint föntebb említettem a listáim már benne vannak a HTML dokumentumban csupán display: none tulajdonságúak, és a script állítja őket block -ra. Erre egyébként én is gondoltam, hogy lehet hogy azért nem jó, mert még az előtt kérdezem le a paramétereket, mielőtt block -ra állítanám a div tulajdonságát. Megpróbáltam úgy is hogy előbb megjelenítem a listát, majd utána kérem le a magasságát és szélességét, viszont sajnos úgy se működött, és továbbra is 0 -át kaptam eredményük mind a magasságra és mind a szélességre. De azért megpróbálom még egyszer, hátha sikerül, mert könnyen lehet hogy elnéztem valamit :-)

Edit : És valóban !

Ott a pont az első HSZ - nél :-) Tényleg az volt a baj hogy mielőtt block -ra állítottam a display-t, az előtt kérdeztem le az értékeket. :-) Egyébként köszönöm szépen a segítséget mindenkinek.