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。