Podczas pracy nad projektami responsywnymi korzystam z zapytań o media CSS3, w tym ze starszymi przeglądarkami używającymi pliku response.js. Są sytuacje, gdy potrzebuję również JavaScript/jQuery do manipulowania niektórymi elementami na stronie. Jednak przy użyciu $ (window) .width() ta wartość jest często inna niż wartość używana w zapytaniu o media CSS z powodu przeglądarki Chrome i/lub obecności pionowego paska przewijania, co oznacza, że zapytanie o media CSS zostanie wywołane inny punkt przerwania niż zapytanie o media JS.Synchronizacja zapytań o media CSS i JS w przeglądarkach
Wiem, że Modernizr rozwiązuje ten problem za pomocą narzędzia Modernizr.mq, ale działa tylko w przeglądarkach, które obsługują zapytania o media CSS na początek, co oznacza, że nie będzie działać w IE8 i poniżej. Jeśli użyjesz funkcji polyfill do dodania obsługi zapytań o media do tych starszych przeglądarek (np. Answer.js), to program Modernizr.mq przestanie działać z powodu konfliktu/przesłaniania między tymi dwoma.
Zamiast tego wykorzystałem ukryty element wejściowy na stronie i nadałem mu styl szerokości CSS w każdym z zapytań o media. Mam następnie funkcję, która uruchamia się automatycznie na stronie (i zmiany rozmiaru), który otrzymuje tę wartość szerokości i wykonuje następujące czynności:
if (width == "320px") {
//Functions
}
//481px to 600px
else if (width == "481px") {
//Functions
}
//601px to 768px
else if (width == "601px") {
//Functions
}
//769px to 960px
else if (width == "769px") {
//Functions
}
//769 to 1024px
else if (width == "961px") {
//Functions
}
//1024px+
else {
//Functions
}
To w zasadzie wymusza JS pracować całkowicie wyłączyć zapytania mediów CSS, synchronizowania dwa. Może to być bardziej szczegółowe, a nie ogólne, jak to mam, zamiast wyzwalać w oparciu o konkretny element i konkretny styl, który zmienia się na tym elemencie, zależy to od indywidualnych potrzeb projektu.
Moje pytanie brzmi, czy istnieje prostszy sposób robienia tego? Spędziłem dużo czasu na analizowaniu i eksperymentowaniu z tym i wydaje się to najlepszą opcją do tej pory, która bierze pod uwagę również starsze przeglądarki.
Tak naprawdę czytałem ten wpis i dziękuję za odpowiedź. Screen.width zwraca stałą wartość, ponieważ w oczywisty sposób ocenia szerokość ekranu nad szerokością okna, co oznacza, że nie zobaczysz żadnych responsywnych zmian, jeśli zmienisz rozmiar okna przeglądarki. Chociaż nie jest to z natury problem, utrudnia to testowanie, ponieważ będziesz musiał mieć rzeczywiste urządzenia o określonej szerokości do przetestowania. – seannachie
Ponadto, z zapytaniem, musisz użyć polyfill do dodania obsługi MediaMatch. Jednakże, aby uzyskać IE8 i poniżej, aby w ogóle rozpoznawać zapytania o media, musisz także użyć polyfill do obsługi zapytań o media ... te dwie polyfills nie działają razem. To znaczy, że jeśli chcę, aby mój JS/CSS był zsynchronizowany, moje zapytania będą musiały być w JS lub wszystkie w CSS. Jeśli to ma sens ... lol – seannachie
Jeśli oldIE jest problemem, może RespondJS? – kaidez