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 相关文章推荐
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
May 25 Javascript
获取URL地址中的文件名和参数的javascript代码
Sep 02 Javascript
jquery nth-child()选择器的简单应用
Jul 10 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
javascript面向对象三大特征之封装实例详解
Jul 24 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 Javascript
JS如何实现手机端输入验证码效果
May 13 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 翻页 实例代码
2009/08/07 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
js数字转换为float,取N位小数
2014/02/08 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
python3.5使用tkinter制作记事本
2016/06/20 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
抄作业检讨书
2014/02/17 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
车间主任岗位职责
2015/02/03 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Nginx配置https的实现
2021/11/27 Servers
python 单机五子棋对战游戏
2022/04/28 Python