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 相关文章推荐
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
Dec 22 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
jQuery中复合选择器简单用法示例
Mar 31 jQuery
vue2.0获取鼠标位置的方法
Sep 13 Javascript
angularJs利用$scope处理升降序的方法
Oct 08 Javascript
解决layer弹出层自适应页面大小的问题
Sep 16 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
python操作oracle的完整教程分享
2018/01/30 Python
pandas重新生成索引的方法
2018/11/06 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python实现高斯投影正反算方式
2020/01/17 Python
python如何将图片转换素描画
2020/09/08 Python
浅析Python中字符串的intern机制
2020/10/03 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
致长跑运动员广播稿
2014/01/31 职场文书
风险评估实施方案
2014/03/09 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
员工工作表现自我评价
2015/03/06 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书