• JavaScript根据CSS的Media Queries来判断浏览设备的方法


    CSS 部分

    首先随便新建一个用来做判断的类,然后通过 Media Queries 来对这个类的 z-index 属性赋予不同的值。这个类仅作为 JavaScript 读取使用,所以需要将其移出屏幕窗口,让浏览者不可见以免引起意外情况。

    作为演示,下面代码设置了四种设备状态:桌面普通版、小屏幕桌面版、平板电脑版和手机版。

    /* default state */
    .state-indicator {
      position: absolute;
      top: -999em;
      left: -999em;
     
      z-index: 1;
    }
     
    /* small desktop */
    @media all and (max- 1200px) {
      .state-indicator {
        z-index: 2;
      }
    }
     
    /* tablet */
    @media all and (max- 1024px) {
      .state-indicator {
        z-index: 3;
      }
    }
     
    /* mobile phone */
    @media all and (max- 768px) {
      .state-indicator {
        z-index: 4;
      }
    }
    

      

    JavaScript 判断

    CSS 已经就位了,那么就需要用 JavaScript 来生成了一个临时的 DOM 对象,然后为它设置对应的类,然后再读取这个对象的 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() 函数返回的就是 z-index 的值,为了增强一下可读性,可以用 switch 函数来规范输出一下:
     
    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;
      }
    }
    

      

    这样,就可以用一下代码来判断设备状态,然后执行相应的 JavaScript 代码

    if(getDeviceState() == 'tablet') {
      // 平板电脑下执行的 JavaScript 代码
    }
    

      

    这里如果你使用的是 jQuery,直接使用下面代码就可以了:

    $(function(){
      $('body').append('<div class="state-indicator"></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();
    });
    

      

  • 相关阅读:
    WPF 自定义CheckBox样式
    WPF中的动画——(二)From/To/By 动画
    C# 异步编程
    C# 二维码生成 ( QRCoder )
    ASP.NET Core中的依赖注入(2):依赖注入(DI)
    从零搭建分布式文件系统MinIO比FastDFS要更合适
    WPF : ControlTemplate和DataTemplate的区别
    wpf 中 theme 的使用 和 listview 模板的使用.
    wpf 中的DataTemplate 绑定控件
    HTTP状态码含义
  • 原文地址:https://www.cnblogs.com/good10000/p/5483836.html
Copyright © 2020-2023  润新知