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


Posted in Javascript onMay 10, 2016

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 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
页面调用单个swf文件,嵌套出多个方法。
Nov 21 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
jquery实现简单的无缝滚动
Apr 15 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
微信小程序防止多次点击跳转(函数节流)
Sep 19 Javascript
javascript实现动态时钟的启动和停止
Jul 29 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 Javascript
JavaScript中的原型prototype完全解析
May 10 #Javascript
简单解析JavaScript中的__proto__属性
May 10 #Javascript
Web Uploader文件上传插件使用详解
May 10 #Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 #Javascript
JS上传组件FileUpload自定义模板的使用方法
May 10 #Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 #Javascript
javascript关于继承解析
May 10 #Javascript
You might like
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
php字符串操作常见问题小结
2016/10/11 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
查看Django和flask版本的方法
2018/05/14 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python统计文章中单词出现次数实例
2020/02/27 Python
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
电子商务实训报告总结
2014/11/05 职场文书
公务员个人年终总结
2015/02/12 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
运动会跳远广播稿
2015/08/19 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers