JavaScript根據(jù)CSS的Media Queries來判斷瀏覽設(shè)備的方法

字號:


    這篇文章主要介紹了JavaScript根據(jù)CSS的Media Queries來判斷瀏覽設(shè)備的方法,主要思路是通過CSS Media Queries改變一個類的某個屬性值(例如 z-index),然后用JavaScript讀取判斷,需要的朋友可以參考下
    CSS 部分
    首先隨便新建一個用來做判斷的類,然后通過 Media Queries 來對這個類的 z-index 屬性賦予不同的值。這個類僅作為 JavaScript 讀取使用,所以需要將其移出屏幕窗口,讓瀏覽者不可見以免引起意外情況。
    作為演示,下面代碼設(shè)置了四種設(shè)備狀態(tài):桌面普通版、小屏幕桌面版、平板電腦版和手機版。
    /* default state */
    .state-indicator {
      position: absolute;
      top: -999em;
      left: -999em;
      z-index: 1;
    }
    /* small desktop */
    @media all and (max-width: 1200px) {
      .state-indicator {
        z-index: 2;
      }
    }
    /* tablet */
    @media all and (max-width: 1024px) {
      .state-indicator {
        z-index: 3;
      }
    }
    /* mobile phone */
    @media all and (max-width: 768px) {
      .state-indicator {
        z-index: 4;
      }
    }
    JavaScript 判斷
    CSS 已經(jīng)就位了,那么就需要用 JavaScript 來生成了一個臨時的 DOM 對象,然后為它設(shè)置對應(yīng)的類,然后再讀取這個對象的 z-index 值。原生的寫法如下:
    // Create the state-indicator element
    var indicator = document.createElement('div');
    indicator.className = 'state-indicator';
    document.body.appendChild(indicator);
    // Create a method which returns device state
    function getDeviceState() {
      return parseInt(window.getComputedStyle(indicator).getPropertyValue('z-index'), 10);
    }
    getDeviceState() 函數(shù)返回的就是 z-index 的值,為了增強一下可讀性,可以用 switch 函數(shù)來規(guī)范輸出一下:
    function getDeviceState() {
      switch(parseInt(window.getComputedStyle(indicator).getPropertyValue('z-index'), 10)) {
        case 2:
          return 'small-desktop';
          break;
        case 3:
          return 'tablet';
          break;
        case 4:
          return 'phone';
          break;
        default:
          return 'desktop';
          break;
      }
    }
    這樣,就可以用一下代碼來判斷設(shè)備狀態(tài),然后執(zhí)行相應(yīng)的 JavaScript 代碼:
    if(getDeviceState() == 'tablet') {
      // 平板電腦下執(zhí)行的 JavaScript 代碼
    }
    這里如果你使用的是 jQuery,直接使用下面代碼就可以了:
    $(function(){
      $('body').append('<div></div>');
      function getDeviceState() {
        switch(parseInt($('.state-indicator').css('z-index'),10)) {
          case 2:
            return 'small-desktop';
            break;
          case 3:
            return 'tablet';
            break;
          case 4:
            return 'phone';
            break;
          default:
            return 'desktop';
            break;
        }
      }
      console.log(getDeviceState());
      $('.state-indicator').remove();
    });
    先創(chuàng)建,然后獲取,最后刪掉這個節(jié)點,具體的設(shè)備會在你的控制臺中輸出,可以試著拖動一下中間的邊框,然后點擊 Run。