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 相关文章推荐
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
js跳转页面方法实现汇总
Feb 11 Javascript
javascript+ajax实现产品页面加载信息
Jul 09 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
Mar 30 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
vue实现ToDoList简单实例
Feb 07 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
Mar 22 Javascript
利用JS如何计算字符串所占字节数示例代码
Sep 13 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 Javascript
如何在Vue中抽离接口配置文件
Oct 31 Javascript
Node.js 中如何收集和解析命令行参数
Jan 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
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
巴黎一票通:The Paris Pass
2018/02/10 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
买房协议书范本
2014/10/23 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
学习保证书
2015/01/17 职场文书
初中军训感言
2015/08/01 职场文书
感恩教育主题班会
2015/08/12 职场文书
nginx之内存池的实现
2022/06/28 Servers