Jak użyć jQuery do określenia rozmiaru okienka przeglądarki i do ponownego wykrycia tego, jeśli rozmiar strony się zmieni? Muszę zrobić rozmiar IFRAME w tej przestrzeni (pojawi się trochę na każdym marginesie).
Dla tych, którzy nie wiedzą, rzutnia przeglądarki nie ma rozmiaru dokumentu / strony. Jest to widoczny rozmiar twojego okna przed przewijaniem.
Odpowiedzi:
Aby uzyskać szerokość i wysokość rzutni:
zmień rozmiar zdarzenia strony:
źródło
innerWidth
/innerHeight
jest bardziej poprawny w użyciu (obejmujący powiększanie).DOCTYPE
deklarację, np<!DOCTYPE html>
.Możesz wypróbować jednostki rzutni (CSS3):
Obsługa przeglądarki
źródło
1. Odpowiedź na główne pytanie
Skrypt
$(window).height()
działa dobrze (pokazuje wysokość rzutni, a nie dokument z przewijaną wysokością), ALE musi poprawnie wstawić znacznik doctype w dokumencie, na przykład następujące typy dokumentów:W przypadku HTML 5:
<!DOCTYPE html>
W przypadku przejściowego HTML4:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Prawdopodobnie domyślny typ dokumentu przyjęty przez niektóre przeglądarki jest taki, że
$(window).height()
przyjmuje wysokość dokumentu, a nie wysokość przeglądarki. Dzięki specyfikacji doctype jest zadowalająco rozwiązany i jestem prawie pewien, że pieprzysz uniknie „zmiany przepełnienia przewijania na ukryte, a potem z powrotem”, co jest, przykro mi, trochę brudną sztuczką, szczególnie jeśli nie udokumentować na kodzie do wykorzystania w przyszłości przez programistę.2. DODATKOWA wskazówka, uwaga na bok: Co więcej, jeśli wykonujesz skrypt, możesz wynaleźć testy, które pomogą programistom w korzystaniu z bibliotek, pozwól mi wynaleźć kilka:
$ (dokument) .ready (function () {});EDYCJA: o części 2, „DODATKOWA wskazówka, odłóż na bok”: @Machiel, we wczorajszym komentarzu (2014-09-04), miał absolutnie rację: sprawdzenie $ nie może być w gotowym wydarzeniu Jquery, ponieważ jak zauważył, zakładamy, że $ jest już zdefiniowane. DZIĘKUJEMY ZA PUNKTOWANIE, ŻE, i proszę, resztę czytelnicy poprawcie, jeśli użyliście tego w swoich skryptach. Moja sugestia: w bibliotekach umieść funkcję „install_script ()”, która inicjuje bibliotekę (umieść dowolne odwołanie do $ wewnątrz takiej funkcji init, w tym deklarację ready ()) i NA POCZĄTKU takiej funkcji „install_script ()” , sprawdź, czy $ jest zdefiniowane, ale uniezależnij wszystko od JQuery, aby twoja biblioteka mogła „zdiagnozować się”, gdy JQuery nie jest jeszcze zdefiniowane. Wolę tę metodę niż wymuszanie automatycznego tworzenia JQuery przynoszącego ją z CDN. Są to małe notatki, które pomagają innym programistom. Myślę, że osoby tworzące biblioteki muszą być bogatsze w informacje zwrotne na temat potencjalnych błędów programisty. Na przykład Google Apis potrzebuje podręcznika, aby zrozumieć komunikaty o błędach. To absurdalne, że potrzebna jest zewnętrzna dokumentacja dotycząca drobnych błędów, które nie wymagają od ciebie szukania instrukcji lub specyfikacji. Biblioteka musi być DOKUMENTOWANA. Piszę kod nawet dbając o błędy, które mógłbym popełnić nawet za sześć miesięcy, i nadal stara się być czystym i nie powtarzalnym kodem, już napisanym, aby zapobiec błędom przyszłego programisty. Myślę, że osoby tworzące biblioteki muszą być bogatsze w informacje zwrotne na temat potencjalnych błędów programisty. Na przykład Google Apis potrzebuje podręcznika, aby zrozumieć komunikaty o błędach. To absurdalne, że potrzebna jest zewnętrzna dokumentacja dotycząca drobnych błędów, które nie wymagają od ciebie szukania instrukcji lub specyfikacji. Biblioteka musi być DOKUMENTOWANA. Piszę kod nawet dbając o błędy, które mógłbym popełnić nawet za sześć miesięcy, i nadal stara się być czystym i nie powtarzalnym kodem, już napisanym, aby zapobiec błędom przyszłego programisty. Myślę, że osoby tworzące biblioteki muszą być bogatsze w informacje zwrotne na temat potencjalnych błędów programisty. Na przykład Google Apis potrzebuje podręcznika, aby zrozumieć komunikaty o błędach. To absurdalne, że potrzebna jest zewnętrzna dokumentacja dotycząca drobnych błędów, które nie wymagają od ciebie szukania instrukcji lub specyfikacji. Biblioteka musi być DOKUMENTOWANA. Piszę kod nawet dbając o błędy, które mógłbym popełnić nawet za sześć miesięcy, i nadal stara się być czystym i nie powtarzalnym kodem, już napisanym, aby zapobiec błędom przyszłego programisty. musisz przejść do instrukcji obsługi lub specyfikacji. Biblioteka musi być DOKUMENTOWANA. Piszę kod nawet dbając o błędy, które mógłbym popełnić nawet za sześć miesięcy, i nadal stara się być czystym i nie powtarzalnym kodem, już napisanym, aby zapobiec błędom przyszłego programisty. musisz przejść do instrukcji obsługi lub specyfikacji. Biblioteka musi być DOKUMENTOWANA. Piszę kod nawet dbając o błędy, które mógłbym popełnić nawet za sześć miesięcy, i nadal stara się być czystym i nie powtarzalnym kodem, już napisanym, aby zapobiec błędom przyszłego programisty.
źródło
$
po tym, jak już używałeś$
połączenia$(document).ready(function() { } );
. Dobrze jest sprawdzić, czy jQuery jest dostępne, ale w tym momencie jest już za późno.Możesz użyć $ (okno) .resize (), aby sprawdzić, czy rozmiar rzutni jest zmieniony.
jQuery nie ma żadnej funkcji do spójnego wykrywania prawidłowej szerokości i wysokości rzutni [1], gdy obecny jest pasek przewijania.
Znalazłem rozwiązanie, które korzysta z biblioteki Modernizr, a konkretnie z funkcji mq, która otwiera zapytania o media dla javascript.
Oto moje rozwiązanie:
Moja odpowiedź prawdopodobnie nie pomoże zmienić rozmiaru ramki iframe do 100% szerokości rzutni z marginesem po każdej stronie, ale mam nadzieję, że zapewni ukojenie programistom internetowym sfrustrowanym niespójnością przeglądarki w zakresie obliczania szerokości i wysokości rzutni javascript.
Może to może pomóc w odniesieniu do iframe:
[1] Możesz użyć $ (okno) .width () i $ (okno) .height (), aby uzyskać liczbę, która będzie poprawna w niektórych przeglądarkach, ale w innych będzie niepoprawna. W tych przeglądarkach możesz spróbować użyć window.innerWidth i window.innerHeight, aby uzyskać prawidłową szerokość i wysokość, ale odradzałbym tę metodę, ponieważ polegałaby na wąchaniu agenta użytkownika.
Zwykle różne przeglądarki nie są zgodne co do tego, czy zawierają pasek przewijania jako część szerokości i wysokości okna.
Uwaga: Zarówno $ (okno) .width (), jak i window.innerWidth różnią się w zależności od systemu operacyjnego używającego tej samej przeglądarki. Zobacz: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
źródło
źródło
Aby uzyskać rozmiar rzutni przy obciążeniu i przy zmianie rozmiaru (na podstawie odpowiedzi SimaWB):
źródło
Pamiętaj, że jednostki rzutni CSS3 (vh, vw) nie działałyby dobrze w iOS. Kiedy przewijasz stronę, rozmiar rzutni jest w jakiś sposób ponownie obliczany, a rozmiar elementu, który korzysta z jednostek rzutni, również się zwiększa. Tak więc w rzeczywistości wymagany jest javascript.
źródło