中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在JavaScript中使用媒體查詢

發布時間:2023-03-07 18:00:18 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“怎么在JavaScript中使用媒體查詢”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么在JavaScript中使用媒體查詢”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    前言

    說起媒體查詢想必大家最先想到的都是CSS中@media,沒錯,這是我們最常用的媒體查詢方法,主要用來為我們的網站做適配處理。

    比如:

    h2 {
      font-size: 2rem;
      color: green;
    }
    @media (min-width: 600px) {
      h2 {
        font-size: 4rem;
      }
    }

    我們使用 CSS 告訴瀏覽器標題需要為綠色,字體大小為 2rem。但是當屏幕寬度超過 600px 時,字體大小需要增加到 4rem。

    上面這種方式相信大家都并不陌生,現在我們再來嘗試另外一種媒體查詢的方法。

    在JavaScript中使用媒體查詢

    我們可以在 JavaScript 代碼中使用與上面相同的媒體查詢。主要API就是 ----matchMedia()

    Window.matchMedia()

    WindowmatchMedia() 方法返回一個新的 MediaQueryList對象,表示指定的媒體查詢 (en-US)字符串解析后的結果。返回的 MediaQueryList 可被用于判定 Document 是否匹配媒體查詢,或者監控一個 document 來判定它匹配了或者停止匹配了此媒體查詢。(MDN)

    語法

    mqList = window.matchMedia(mediaQueryString)

    參數

    matchMedia()方法接受單個參數作為其值,即您要檢查的媒體查詢。

    • mediaQueryString:一個被用于媒體查詢解析的字符串。

    返回值

    一個用來媒體查詢的新的MediaQueryList對象

    它包含兩個屬性:

    media,它將媒體查詢存儲為序列化字符串

    matches,它基本上是一個布爾值,如果我們作為參數提供的媒體查詢與文檔匹配則返回true

    調用matchMedia本身不會做太多的事情,并且我們只能在頁面加載時檢查是否滿足查詢條件,但如果我們想要在用戶改變屏幕大小時也能檢測到這種變化,在過去有兩種方法,稱為addListener()removeListener(),可以使用它們來監聽媒體查詢狀態的任何變化。但是,它們現在已被棄用。

    現在我們應該考慮使用MediaQueryList addEventListener

    addEventListener

    matchMedia - change

    <div id="show"></div>
    <script>
      let mqList = window.matchMedia('(min-width: 600px)');
    function widthChangeCallback(mqList) {
      console.log(mqList, '-')
      if(mqList.matches) {
        show.innerHTML = `<p class="large">我比599px大</p>`;
      } else {
        show.innerHTML = `<p class="small">我比599px小</p>`;
      }
    }
    widthChangeCallback(mqList)
    mqList.addEventListener('change', widthChangeCallback);
    </script>

    當我們調整窗口大小時,這段代碼會檢測屏幕寬度并更新文案

    window - resize

    看到這里可能大家都想到了resize事件,沒錯該matchMedia()方法的另一種替代方法涉及將resize事件偵 聽 器附加到window,同樣能夠實現上面的效果。

    function widthChangeCallback() {
      if(window.innerWidth > 599) {
        show.innerHTML = `<p class="large">我比599px大</p>`;
      } else {
        show.innerHTML = `<p class="small">我比599px小</p>`;
      }
    }
    window.addEventListener('resize', widthChangeCallback);
    widthChangeCallback();

    性能對比

    既然兩種方案都能實現,所以我們很自然地想知道它們中的哪一個能提供更好的性能,以及我們應該在什么時候使用這些解決方案中的每一個。

    widthChangeCallback()每次調整窗口大小時,調整大小事件偵 聽 器都會觸發該函數。這僅在某些情況下需要響應窗口大小更改的每個實例,例如更新畫布。

    但是,在某些情況下,只有當寬度或高度達到某個閾值時才需要發生某些事情。一個例子就是我們上面所做的文本更新。在這種情況下,matchMedia()將會獲得更好的性能,因為它僅在媒體查詢條件的實際更改時觸發回調。

    從上面我們可以看出兩者的回調執行次數差異巨大,所以我們在開發過程中應當根據業務的實際需求去選擇使用哪一個API。

    讀到這里,這篇“怎么在JavaScript中使用媒體查詢”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    杨浦区| 武清区| 日喀则市| 江孜县| 手机| 东宁县| 富阳市| 贵阳市| 柘城县| 玉环县| 库尔勒市| 安远县| 宁武县| 琼结县| 衡山县| 四子王旗| 德钦县| 罗田县| 思茅市| 读书| 育儿| 中宁县| 本溪| 蓝田县| 临沧市| 绥滨县| 榆树市| 大洼县| 灵宝市| 稷山县| 库尔勒市| 民县| 莎车县| 云龙县| 孟州市| 会宁县| 铜梁县| 天镇县| 连州市| 安阳县| 遂昌县|