使用window.matchMedia()匹配多個CSS媒體查詢(7)

cenfeng發表於2019-08-12

這是完整的JavaScript:

1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" > var leftcolumn = document.getElementById(“leftcolumn”)。getElementsByTagName(“em”)[0]</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
var rightcolumn = document.getElementById(“rightcolumn”)。getElementsByTagName(“em”)[0]</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
var maincolumn = document.getElementById(“contentcolumn”)。getElementsByTagName(“em”)[0]</font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
var mqls = [</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     window.matchMedia(“(max-width:840px)”),</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     window.matchMedia(“(最大寬度:600px)”)</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
]</font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
function mediaqueryresponse(mql){</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     if (mqls [0] .matches){ // {max-width:840px}查詢匹配</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         leftcolumn.innerHTML =“180px” //不是多餘的</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         maincolumn.innerHTML =“流體(響應佈局觸發)”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
         rightcolumn.innerHTML =“流體(響應佈局觸發)”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     }</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     if (mqls [1] .matches){ // {max-width:600px}查詢匹配</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         leftcolumn.innerHTML =“流體(響應佈局觸發)”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     }</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     if (!mqls [0] .matches &&!mqls [1] .matches){ //兩個查詢都不匹配</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         rightcolumn.innerHTML =“190px”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
         leftcolumn.innerHTML =“180px”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
         maincolumn.innerHTML =“固定”</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     }</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
}</font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
for var i = 0; i <mqls.length; i ++){</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
     mediaqueryresponse(mqls [i]) //在執行時顯式呼叫偵聽器函式</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     mqls [i] .addListener(mediaqueryresponse) //附加偵聽器函式以偵聽狀態更改</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font>

我們處理函式中的邏輯被設定,因此程式碼的每個部分彼此不相互排斥 -  (max-width: 600px) 例如, 當查詢“  ”匹配 時,“  ”也是如此 (max-width: 840px) ,反之亦然,所以我們不應該使用“  else ”宣告跟隨每個“  if ”宣告以捕捉“對立”條件,這可能是眾多之一。 相反,只需逐步執行我們的程式碼,並在最後測試時,何時兩個查詢都不匹配,以檢測何時佈局既不是840px也不是600px寬。

現在,看看這一行:

1
<font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >  leftcolumn.innerHTML =“180px” //不是多餘的</font></font>

if 佈局為840px或更低時匹配 的“  ”子句 內部 它可能看起來多餘 - 畢竟, leftcolumn 當螢幕寬度超過840px時 ,我們已經設定“  ”顯示“180px”,所以進入840px,為什麼重複相同的動作? 原因是我們還需要考慮在相反方向發生的事件 - 即從窄螢幕(即:640px或更小)到更寬螢幕(即:840px或更高)。 在640px階段,“  leftcolumn ”文字被替換為“Fluid(響應佈局觸發)”。 當使用者將瀏覽器的大小調整回840px或更高時,需要程式碼撤消在640px階段完成的操作。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69933200/viewspace-2653431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章