Mai mult
Cum a face tu a lua prestate înălțime de un element?
Cum a face tu a lua prestate înălțime de un element?
Las's spun ai <div> element cu un conținut interior. Acest conținut interior, se va întinde pe o înălțime de
`. Cum puteți obține "prestate" înălțime atunci când te-ai't stabilit în mod explicit la înălțime. Evident, am încercat:
var h = document.getElementById('someDiv').style.height;
Există un truc pentru a face acest lucru? Eu sunt, folosind jQuery cazul în care vă ajută.
366
17
Încercați una dintre:
`clientHeight include înălțime și verticală captuseala.
`offsetHeight include înălțime, verticale umplutură, și frontierele verticală.
`scrollHeight include înălțimea conținute de document (ar fi mai mare decât înălțimea în caz de defilare), verticale umplutură, și frontierele verticală.
Ar trebui să fie doar
cu jQuery. Aceasta preia o înălțime de primul element din înfășurat stabilit ca un număr.
Încercarea de a utiliza
funcționează numai dacă ați setat proprietatea în primul rând. Nu foarte util!
NON JQUERY deoarece nu au fost o grămadă de link-uri folosind `elem.stil.înălțimea în partea de sus a acestor răspunsuri...
ÎNĂLȚIME INTERIOARĂ: https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
EXTERIOR INALTIME: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Sau unul de meu favorit referințe: http://youmightnotneedjquery.com/
Puteți utiliza
.outerHeight()
pentru acest scop.Acesta vă va oferi complet prestate înălțime a elementului. De asemenea, don't nevoie pentru a seta orice `css-înălțime a elementului. Pentru precauție puteți păstra înălțimea auto astfel încât acesta poate fi randat ca pe conținut's înălțime.
Pentru o vedere clară a acestor funcții, puteți merge pentru jQuery's site-ul sau un post detaliat aici.
se va șterge diferența între
.inaltime()
/innerHeight()
/outerHeight()
Eu folosesc asta:
De asemenea, funcționează atunci când utilizați virtual DOM. Am folosit-o în Vue astfel:
apoi, pur și simplu: "stil".inaltime`
Folosi cu siguranta
sau
Am'm a posta acest lucru ca un răspuns suplimentar pentru că sunt câteva lucruri importante am invatat.
Aproape că am căzut în capcana doar acum de ajutorul offsetHeight. Aceasta este ceea ce s-a întâmplat :
Aici's doar o parte din ea :
Da se pare ATÂT la scroll si offset. Dacă aceasta nu reușește arată chiar mai departe, ținând cont de browser-ul și css probleme de compatibilitate. Cu alte cuvinte, LUCRURILE nu-mi mai PASĂ - sau doriți să.
Dar nu trebuie să. Multumesc jQuery!
Morala poveștii : dacă jQuery are o metodă pentru ceva, probabil, pentru un motiv bun, probabil legate de compatibilitate.
Dacă te-ai't citit prin jQuery lista de metode recent, îți sugerez să arunci o privire.
Am făcut un simplu cod care nu't chiar nevoie de JQuery și, probabil, o să ajut niște oameni. Devine înălțimea totală de 'ID1' după încărcate și de a folosi pe 'ID2'
Apoi setați corpul să-l încarce
Hm putem obține Elementul geometrie...
Ce zici de asta simplu JS ?
Deci acesta este raspunsul?
"Dacă aveți nevoie pentru a calcula ceva, dar nu-l arate, amplasat elementul să
visibility:hidden " și " position:absolute
, adăugați-l la copac DOM, pentru a primi offsetHeight, și scoateți-l. (Ca's ce prototipul biblioteca are în spatele liniilor ultima dată când am verificat)."Am aceeasi problema pe un număr de elemente. Nu există nici jQuery sau Prototype pentru a fi utilizate pe site, dar am'm toate în favoarea împrumut tehnica daca functioneaza. Ca un exemplu de unele lucruri pe care nu a reușit să lucreze, urmată de ceea ce a făcut, am urmatorul cod:
care, practic, încearcă ceva și totul doar pentru a obține un rezultat zero. ClientHeight cu niciun efect. Cu problema elementele eu de obicei iau NaN în Baza și zero în Compensate și Scroll înălțimi. Am incercat apoi Add DOM soluție și clientRects pentru a vedea dacă acesta funcționează aici.
29 Jun 2011, Am făcut într-adevăr actualizați codul pentru a încerca atât adăugarea la DOM și clientHeight cu rezultate mai bune decât m-am așteptat.
clientHeight fost, de asemenea, 0.
Dom de fapt mi-a dat o înălțime, care a fost mare.
ClientRects returnează un rezultat aproape identic cu DOM tehnica.
Deoarece elementele adăugate sunt de lichid în natură, atunci când sunt adăugate la o altfel de gol DOM Temp element sunt prestate în funcție de lățimea de container. Acest lucru ciudat, pentru că este 30px mai scurte decât este în cele din urmă se termină.
Am adăugat câteva poze pentru a ilustra modul în care înălțimea este calculată în mod diferit.
Înălțimea diferențele sunt evidente. Am putea adăuga cu siguranță poziționarea absolută și ascunse, dar sunt sigur că nu va avea niciun efect. Am continuat să fie convins că acesta nu va funcționa!
(Am deviat de la subiect continuare) înălțimea iese (face) mai mic decât cel adevărat prestate înălțime. Acest lucru ar putea fi abordate prin stabilirea lățimea DOM Temp element pentru a se potrivi existente părinte și-ar putea face destul de exact în teorie. De asemenea, nu știu ce ar rezulta dintr-scoate-le și adăugându-le înapoi în locația existentă. Ca au ajuns printr-o innerHTML tehnica nu va fi în căutarea folosind acest abordare diferită.
Cu toate ACESTEA Nimic nu a fost necesar. În fapt, ea a lucrat ca publicitate și s-a întors la înălțimea corectă!!!
Când am fost în stare pentru a obține meniurile vizibile din nou uimitor DOM-au întors la înălțimea corectă pe aspect fluid în partea de sus a paginii (279px). Codul de mai sus utilizează, de asemenea, getClientRects care returnează 280px.
Acest lucru este ilustrat în următoarele instantaneu (luate de la Chrome dată de lucru.)
Acum am nuuuuuu idee de ce prototip truc funcționează, dar se pare că. Alternativ, getClientRects, de asemenea, funcționează.
Bănuiesc că de toate aceste probleme cu aceste elemente a fost utilizarea de innerHTML în loc de appendChild, dar asta este o pură speculație la acest punct.
offsetHeight
, de obicei.Dacă aveți nevoie pentru a calcula ceva, dar nu-l arate, amplasat elementul să
visibility:hidden " și " position:absolute
, adăugați-l la copac DOM, iaoffsetHeight
, și scoateți-l. (Ca's ce prototipul biblioteca are în spatele scenei ultima dată când am verificat).Uneori offsetHeight va reveni la zero, deoarece elementul de'am creat nu a fost pronunțată în Dom încă. Am scris această funcție pentru astfel de situații:
Dacă utilizați jQuery deja, cel mai bun pariu este de
.outerHeight () "sau".inaltime()
, după cum a fost menționat.Fără jQuery, puteți verifica box-dimensionare în uz și se adaugă diverse garniture + borders + clientHeight, sau puteți utiliza getComputedStyle:
var h = getComputedStyle(document.getElementById('someDiv')).înălțime;
"h" va fi un șir de caractere ca un "53.825 px".
Și nu pot't găsi de referință, dar cred că am auzit
getComputedStyle()
poate fi costisitoare, asa ca's, probabil, ceva ce nu vrei să suni pe fiecare fereastra.onscrolleveniment (dar apoi, nici nu este jQuery's
înălțime()`).Cu MooTools:
$('someDiv').getSize().y
Dacă am înțeles întrebarea dumneavoastră în mod corect, atunci poate ceva de genul asta ar ajuta:
Au setați înălțimea în css în mod special? Dacă te-ai't trebuie să utilizați
offsetHeight;
, mai degrabă decât "înălțime"