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

CSS 部分

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

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

rush:css;"> /* 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 值。原生的写法如下:

rush:js;"> // 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 代码

rush:js;"> if(getDeviceState() == 'tablet') { // 平板电脑下执行的 JavaScript 代码 }

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

rush:js;"> $(function(){ $('body').append('
');

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();
});

先创建,然后获取,最后删掉这个节点,具体的设备会在你的控制台中输出nofollow" target="_blank" href="http://jsfiddle.net/yujiangshui/6A87y/2/">点击这里查看 Demo ,可以试着拖动一下中间的边框,然后点击 Run。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...