JavaScript根据CSS的Media Queries来判断浏览设备的方法
CSS部分
首先随便新建一个用来做判断的类,然后通过MediaQueries来对这个类的z-index属性赋予不同的值。这个类仅作为JavaScript读取使用,所以需要将其移出屏幕窗口,让浏览者不可见以免引起意外情况。
作为演示,下面代码设置了四种设备状态:桌面普通版、小屏幕桌面版、平板电脑版和手机版。
/*defaultstate*/
.state-indicator{
position:absolute;
top:-999em;
left:-999em;
z-index:1;
}
/*smalldesktop*/
@mediaalland(max-width:1200px){
.state-indicator{
z-index:2;
}
}
/*tablet*/
@mediaalland(max-width:1024px){
.state-indicator{
z-index:3;
}
}
/*mobilephone*/
@mediaalland(max-width:768px){
.state-indicator{
z-index:4;
}
}
JavaScript判断
CSS已经就位了,那么就需要用JavaScript来生成了一个临时的DOM对象,然后为它设置对应的类,然后再读取这个对象的z-index值。原生的写法如下:
//Createthestate-indicatorelement
varindicator=document.createElement('div');
indicator.className='state-indicator';
document.body.appendChild(indicator);
//Createamethodwhichreturnsdevicestate
functiongetDeviceState(){
returnparseInt(window.getComputedStyle(indicator).getPropertyValue('z-index'),10);
}
getDeviceState()函数返回的就是z-index的值,为了增强一下可读性,可以用switch函数来规范输出一下:
functiongetDeviceState(){
switch(parseInt(window.getComputedStyle(indicator).getPropertyValue('z-index'),10)){
case2:
return'small-desktop';
break;
case3:
return'tablet';
break;
case4:
return'phone';
break;
default:
return'desktop';
break;
}
}
这样,就可以用一下代码来判断设备状态,然后执行相应的JavaScript代码:
if(getDeviceState()=='tablet'){
//平板电脑下执行的JavaScript代码
}
这里如果你使用的是jQuery,直接使用下面代码就可以了:
$(function(){
$('body').append('<divclass="state-indicator"></div>');
functiongetDeviceState(){
switch(parseInt($('.state-indicator').css('z-index'),10)){
case2:
return'small-desktop';
break;
case3:
return'tablet';
break;
case4:
return'phone';
break;
default:
return'desktop';
break;
}
}
console.log(getDeviceState());
$('.state-indicator').remove();
});
先创建,然后获取,最后删掉这个节点,具体的设备会在你的控制台中输出,点击这里查看Demo,可以试着拖动一下中间的边框,然后点击Run。