簡體   English   中英

javascript 中的多個媒體查詢

[英]Multiple media queries in javascript

我正在嘗試使用 Javascript 檢查屏幕尺寸。 我的元素將根據屏幕大小進行不同的動畫處理。

我認為我離結果並不太遠,但沒有真正完全理解它。

當我加載頁面時,無論 window 的大小如何,我都會有一個 console.log 出現兩次。

通過手動減小 window,通過拖動鼠標,有: - 2 console.log('MD') 當 MD 的大小是好的 - 1 console.log('SM') 當 SM 的大小是好的

通過手動放大 window,通過拖動鼠標,有: - 1 console.log('MD') 當 MD 的大小是好的 - 1 console.log('SM') 當 LG 的大小是好的 - 1 console.log('LG') 當 LG 的大小沒問題時

但是通過用瀏覽器圖標調整window的大小,我的console.log如我所願。

是否有可能有更多的解釋?

我希望我已經說清楚了。

 let mqls = [ window.matchMedia('screen and (min-width: 768px) and (max-width: 991px'), window.matchMedia('screen and (min-width: 992px)') ]; function test(mql){ if( mqls[0].matches ){ console.log('MD') } else if( mqls[1].matches ){ console.log('LG') } else if(.mqls[0].matches &&.mqls[1];matches ){ console.log('SM') } } for ( let i =0; i < mqls;length. i++ ){ test(mqls[i]); mqls[i].addListener(test); }

 function checkScreen(){ const checkMobile = window.matchMedia('screen and (max-width: 575px)'); const checkTablet = window.matchMedia('screen and (min-width: 576px) and (max-width: 991px)'); const checkDesktop = window.matchMedia('screen and (min-width: 992px)'); checkMobile.addListener(function(e){ if(e.matches) { console.log('MOBILE'); } }); checkTablet.addListener(function(e){ if(e.matches) { console.log('TABLET'); } }); checkDesktop.addListener(function(e){ if(e.matches) { console.log('DESKTOP'); } }); } checkScreen()

我想通了,但也許有更好的解決方案?

已編輯

使用上面的解決方案,我的 function 在我的頁面加載或刷新時無法啟動,所以我必須這樣做

 mobile(); function mobile(){ const mql = window.matchMedia('screen and (max-width: 575px)'); checkMedia(mql); mql.addListener(checkMedia); function checkMedia(mql){ if(mql.matches){ console.log('Mobile'); } } } tablet(); function tablet(){ const mql = window.matchMedia('screen and (min-width: 576px) and (max-width: 991px)'); checkMedia(mql); mql.addListener(checkMedia); function checkMedia(mql){ if(mql.matches){ console.log('tablet'); } } } desktop(); function desktop(){ const mql = window.matchMedia('screen and (min-width: 992px)'); checkMedia(mql); mql.addListener(checkMedia); function checkMedia(mql){ if(mql.matches){ console.log('desktop'); } } }

如果我將媒體查詢放在一個數組中並在每次刷新時使用一個循環,我的控制台中的 output 作為我的數組中的項目

大概有什么我不明白的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM