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 validation插件表单验证的一个例子
Mar 03 Javascript
js中如何把字符串转化为对象、数组示例代码
Jul 17 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
jquery 判断滚动条到达了底部和顶端的方法
Apr 02 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
详解javascript中的事件处理
Nov 06 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
Jan 18 Javascript
微信小程序录音与播放录音功能
Dec 25 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
利用不到200行代码写一款属于你自己的js类库
Jul 08 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实现链结人气统计
2006/10/09 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php格式化金额函数分享
2015/02/02 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
python算法学习之计数排序实例
2013/12/18 Python
python求斐波那契数列示例分享
2014/02/14 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
解决Python中回文数和质数的问题
2019/11/24 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
港湾网络笔试题
2014/04/19 面试题
什么是会话Bean
2015/05/14 面试题
班干部竞选演讲稿
2014/04/24 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
中考学习决心书
2015/02/04 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书