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 相关文章推荐
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
用jQuery打造TabPanel效果代码
May 22 Javascript
xml转json的js代码
Aug 28 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
May 24 Javascript
JS表格组件神器bootstrap table详解(强化版)
May 26 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
Jul 26 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 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实现将上传word文件转为html的方法
2015/06/03 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
python opencv3实现人脸识别(windows)
2018/05/25 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python for循环与range函数的使用详解
2019/03/23 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python 中@property的用法详解
2020/01/15 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
护士辞职信模板
2014/01/20 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
决心书标准格式
2014/03/11 职场文书
汽车促销活动方案
2014/03/31 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
实名检举信范文
2015/03/02 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
如何拟写通知正文?
2019/04/02 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs