W javascript dom - jaka jest różnica między offsetHeight a clientHeight elementu?
javascript
steve
źródło
źródło
Odpowiedzi:
clientHeight :
offsetHeight :
Tak więc
offsetHeight
obejmuje pasek przewijania i obramowanie,clientHeight
nie.źródło
clientSize
łatwo dostępne (w końcu to jest to viewport), ale trzeba wyliczyćoffsetHeight
po przepełnieniu całego dokumentu?Odpowiedzią Odeda jest teoria. Ale teoria i rzeczywistość nie zawsze są takie same, przynajmniej nie w przypadku elementów <BODY> lub <HTML>, które mogą być ważne dla operacji przewijania w javascript.
Microsoft ma ładny obraz w MSDN :
Jeśli masz stronę HTML, która pokazuje pionowy pasek przewijania, można by się spodziewać, że element <BODY> lub <HTML> ma ScrollHeight większy niż OffsetHeight, jak pokazuje ten obraz. Dotyczy to wszystkich starszych wersji przeglądarki Internet Explorer.
Ale nie jest to prawdą w przypadku przeglądarki Internet Explorer 11, a nie przeglądarki Firefox 36. Przynajmniej w tych przeglądarkach OffsetHeight jest prawie taki sam jak ScrollHeight, co jest błędne.
I chociaż OffsetHeight może być błędny, ClientHeight jest zawsze poprawny.
Wypróbuj poniższy kod w różnych przeglądarkach, a zobaczysz:
Podczas gdy starszy Internet Explorer wyświetla się poprawnie:
Dane wyjściowe z przeglądarek Firefox i Internet Explorer 11 to:
co wyraźnie pokazuje, że offsetHeight jest tutaj błędny. OffsetHeight i ClientHeight powinny różnić się tylko o kilka pikseli lub być takie same.
Należy pamiętać, że ClientHeight i OffsetHeight mogą się również znacznie różnić w przypadku elementów, które nie są widoczne, na przykład <FORM>, gdzie OffsetHeight może być rzeczywistym rozmiarem FORMULARZA, podczas gdy ClientHeight może wynosić zero.
źródło