来源:小涵 发布时间:2018-09-19 17:01:14 阅读量:1640
CSS 部分
首先随便新建一个用来做判断的类,然后通过 Media Queries 来对这个类的 z-index 属性赋予不同的值。这个类仅作为 JavaScript 读取使用,所以需要将其移出屏幕窗口,让浏览者不可见以免引起意外情况。
作为演示,下面代码设置了四种设备状态:桌面普通版、小屏幕桌面版、平板电脑版和手机版。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* 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 值。原生的写法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // Create the state-indicator element var indicator = document.createElement( 'p' ); 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 代码:
1 2 3 | if (getDeviceState() == 'tablet' ) { // 平板电脑下执行的 JavaScript 代码 } |
这里如果你使用的是 jQuery,直接使用下面代码就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $( function (){ $( 'body' ).append( '<p class="state-indicator"></p>' ); 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。