media queries są dobrym rozwiązaniem dla zapewnienia alternatywnych stylów dla różnych szerokościach okiennych. Niestety, nie ma żadnego atrybutu media
dla elementu <script>
, aby postępować w podobny sposób.
Można jednak podać skrypt ładujący skrypt, który załaduje żądany plik .js
w zależności od arkusza stylów wybranego przez przeglądarkę na podstawie zapytania o media. Nie wiem, jak to zrobić w bezpośredni, elegancki sposób, ale jest na to fajny hack. Musisz "oznaczyć" każdy znak .css
za pomocą unikatowej deklaracji (manekina, nieważne lub różni się w zależności od projektu) i sprawdzić ją w programie JS po załadowaniu strony, aby ustalić, który arkusz stylów został zastosowany przez przeglądarkę.
HTML może wyglądać następująco:
<style media="handheld, screen and (max-width:1023px)">
body { margin-top: 0px }
</style>
<style media="screen and (min-width:1024px)">
body { margin-top: 1px }
</style>
i towarzyszącego JS następująco:
function onLoad() {
var head = document.getElementsByTagName('head')[0];
var body = document.getElementsByTagName('body')[0];
var mark = window.getComputedStyle(body).getPropertyValue('margin-top');
var script = document.createElement('script');
script.setAttribute('src', mark=='0px' ? 'handheld.js' : 'screen.js');
head.appendChild(script);
}
ta spełnia swoje zadanie, ale tylko na podstawie na obciążenia. Aby uzyskać elastyczną reakcję na zmianę rozmiaru okna przeglądarki przez użytkownika, powinieneś śledzić szerokość wdów i w razie potrzeby ponownie załadować stronę.
Dlaczego potrzebne są różne pliki javascript? Co się stanie, jeśli użytkownik zmieni rozmiar okna? –
Nie mam wątpliwości, że potrzebny jest inny kod dla różnych szerokości, lepsza praca nad logiką. –
Wiem, że coś takiego byłoby wspaniałe przy użyciu zapytań o media. Wiele elementów, które wymagałyby js, już nie istnieje z mobilnym arkuszem stylów. Osobiście chciałbym zatrzymać ładowanie js w ogóle, jeśli przeglądarka spadnie poniżej pewnej szerokości. –