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

 更新时间:2016年05月10日 17:39:31   作者:于江水  
这篇文章主要介绍了JavaScript根据CSS的Media Queries来判断浏览设备的方法,主要思路是通过CSS Media Queries改变一个类的某个属性值(例如 z-index),然后用JavaScript读取判断,需要的朋友可以参考下

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-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 已经就位了,那么就需要用 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();
});

先创建,然后获取,最后删掉这个节点,具体的设备会在你的控制台中输出,点击这里查看 Demo ,可以试着拖动一下中间的边框,然后点击 Run。

相关文章

  • JavaScript  cookie 跨域访问之广告推广

    JavaScript cookie 跨域访问之广告推广

    这篇文章主要介绍了JavaScript cookie 跨域访问之广告推广 的相关资料,需要的朋友可以参考下
    2016-04-04
  • cypress中丰富的调试工具使用方法

    cypress中丰富的调试工具使用方法

    这篇文章主要为大家介绍了cypress中丰富的调试工具及使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 微信小程序3D轮播实现代码

    微信小程序3D轮播实现代码

    这篇文章主要介绍了微信小程序3D轮播实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • JS Array对象入门分析

    JS Array对象入门分析

    每天一对象,今天我们也来new一个。没有系统的学过JS,没有特别的写过一个比较出色的类库,没有运用过一个很强的类库,prototype.js在进行着,慢慢的前进相信不久的将来就可以应用prototype.js来开发自己的应用程序了。
    2008-10-10
  • js css 实现遮罩层覆盖其他页面元素附图

    js css 实现遮罩层覆盖其他页面元素附图

    实现遮罩层的方法有很多,但大多都是使用js css来实现的,本例也实现一个,效果还不错,喜欢的朋友可以感受下
    2014-09-09
  • 原生JS实现逼真的图片3D旋转效果详解

    原生JS实现逼真的图片3D旋转效果详解

    这篇文章主要介绍了原生JS实现逼真的图片3D旋转效果,结合实例形式详细分析了javascript实现图片3D旋转相关操作技巧与注意事项,需要的朋友可以参考下
    2019-02-02
  • js实现类选择器和name属性选择器的示例步骤

    js实现类选择器和name属性选择器的示例步骤

    这篇文章主要介绍了js实现类选择器和name属性选择器的示例步骤,帮助大家更好的理解和使用js,感兴趣的朋友可以了解下
    2021-02-02
  • 屏蔽Flash右键信息的js代码

    屏蔽Flash右键信息的js代码

    网上好多屏蔽flash右键的方法,可多数是过期的或不合适的,现记录下用JS方法屏蔽flash右键相关版权信息。
    2010-01-01
  • 浅谈javascript中基本包装类型

    浅谈javascript中基本包装类型

    在JavaScript中,和JAVA类似,也提供了对于基本数据类型的包装类型。例如Number、Boolean、String类型。下面我们就来详细探讨下吧。
    2015-06-06
  • VBS通过WMI监视注册表变动的代码

    VBS通过WMI监视注册表变动的代码

    似乎有人觉得用VBS监视注册表很高级?使用了WMI事件而已,跟《用VBS监视进程创建和删除》一样
    2011-10-10

最新评论