最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript檢測(cè)移動(dòng)設(shè)備橫豎屏

 更新時(shí)間:2016年05月21日 15:29:37   作者:xbf321  
移動(dòng)端的開發(fā)過程中,免不了要判斷橫豎屏,然后在執(zhí)行其他操作,比如分別加載不同樣式,橫屏顯示某些內(nèi)容,豎屏顯示其他內(nèi)容等等。

如何判斷

移動(dòng)設(shè)備提供了兩個(gè)對(duì)象,一個(gè)屬性,一個(gè)事件:

(1)window.orientation   屬于window對(duì)象上一個(gè)屬性;共有三個(gè)值 :0為豎屏模式(portrait),90為向左反轉(zhuǎn)變?yōu)闄M屏模式(landscape),-90為向右反轉(zhuǎn)變?yōu)闄M屏模式(landscape),最后180就是設(shè)備上下互換還是豎屏模式。

(2)orientationchange     是一個(gè)event,在設(shè)備旋轉(zhuǎn)時(shí),會(huì)觸發(fā)此事件,如同PC上使用的resize事件。

這兩個(gè)搭配起來使用,很容易就能獲得設(shè)備的橫豎屏狀態(tài),代碼如下:

(function(){
 var init = function(){
  var updateOrientation = function(){
   var orientation = window.orientation;
   switch(orientation){
    case 90:
    case -90:
     orientation = 'landscape';
     break;
    default:
     orientation = 'portrait';
     break;
   }

   //do something
   //比如在html標(biāo)簽加一個(gè)狀態(tài)
   //然后根據(jù)不同狀態(tài),顯示不同大小
   document.body.parentNode.setAttribute('class',orientation);
  };

  window.addEventListener('orientationchange',updateOrientation,false);
  updateOrientation();
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

在css中就可以這樣寫:

/**豎屏 div邊框顯示藍(lán)色**/
.portrait body div{
 border:1px solid blue;
}
/**豎屏 div邊框顯示黃色**/
.landscape body div{
 border:1px solid yellow;
}

當(dāng)然還可以使用media queries的方式(推薦這種):

@media all and (orientation: portrait) {
 body div {
 border:1px solid blue;
 }
}
@media all and (orientation: landscape) {
 body div {
 border:1px solid yellow;
 }
}

兼容性

如果window.orientation或者orientationchange在設(shè)備中不存在的情況怎么處理呢?(一般一個(gè)不存在,另一個(gè)也不存在,反之)

在前期開發(fā)中,經(jīng)常會(huì)用Chrome的device model調(diào)式,但是這個(gè)屬性確實(shí)不存在,哪怎么獲得這個(gè)值呢?簡(jiǎn)單的方式就是依據(jù)寬和高的大小比較判斷,寬小于高為豎屏,寬大與高就是橫屏。

獲得結(jié)果的方式知道了,接下來就是怎么監(jiān)聽設(shè)備反轉(zhuǎn)事件了,既然orientationchange不可用,就使用最基本的resize事件或者使用定時(shí)器檢測(cè),還是看代碼:

(function(){
 var updateOrientation = function(){
  var orientation = (window.innerWidth > window.innerHeight) ? 'landscape' : 'portrait';

  document.body.parentNode.setAttribute('class',orientation);
 };

 var init = function(){

  updateOrientation();

  //每5秒檢查一次
  //window.setInterval(updateOrientation,5000);
  
  //監(jiān)聽resize事件
  window.addEventListener('resize',updateOrientation,false);
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

最后,把以上兩種方式合起來,就是一個(gè)完整的檢測(cè)解決方案

(function(){
 var supportOrientation = (typeof window.orientation === 'number' &&
   typeof window.onorientationchange === 'object');

 var init = function(){
  var htmlNode = document.body.parentNode,
   orientation;
  var updateOrientation = function(){
   if(supportOrientation){
    orientation = window.orientation;
    switch(orientation){
     case 90:
     case -90:
      orientation = 'landscape';
      break;
     default:
      orientation = 'portrait';
      break;
    }
   }else{
    orientation = (window.innerWidth > window.innerHeight) ? 'landscape' : 'portrait';
   }
   htmlNode.setAttribute('class',orientation);
  };

  if(supportOrientation){
   window.addEventListener('orientationchange',updateOrientation,false);
  }else{
   //監(jiān)聽resize事件
   window.addEventListener('resize',updateOrientation,false);
  }

  updateOrientation();
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

總結(jié)

通過orientationchange事件來監(jiān)聽設(shè)備是否旋轉(zhuǎn),配合window.orientation屬性判斷當(dāng)前是橫屏還是豎屏,以便執(zhí)行不同的操作。

相關(guān)文章

  • js添加千分位的實(shí)現(xiàn)代碼(超簡(jiǎn)單)

    js添加千分位的實(shí)現(xiàn)代碼(超簡(jiǎn)單)

    下面小編就為大家?guī)硪黄猨s添加千分位的實(shí)現(xiàn)代碼(超簡(jiǎn)單)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 上傳的js驗(yàn)證(圖片/文件的擴(kuò)展名)

    上傳的js驗(yàn)證(圖片/文件的擴(kuò)展名)

    下文給大家介紹下js 驗(yàn)證上傳圖片以及怎樣控制一個(gè)上傳文件的擴(kuò)展名,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助
    2013-04-04
  • JS實(shí)現(xiàn)多物體運(yùn)動(dòng)

    JS實(shí)現(xiàn)多物體運(yùn)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)多物體運(yùn)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • js實(shí)現(xiàn)網(wǎng)頁五子棋進(jìn)階版

    js實(shí)現(xiàn)網(wǎng)頁五子棋進(jìn)階版

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)網(wǎng)頁五子棋進(jìn)階版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • html+javascript+bootstrap實(shí)現(xiàn)層級(jí)多選框全層全選和多選功能

    html+javascript+bootstrap實(shí)現(xiàn)層級(jí)多選框全層全選和多選功能

    想做一個(gè)先按層級(jí)排序并可以多選的功能,首先傾向于用多層標(biāo)簽式的,直接選定加在文本域里,接下來通過本文給大家介紹html+javascript+bootstrap實(shí)現(xiàn)層級(jí)多選框全層全選和多選功能,需要的朋友參考下
    2017-03-03
  • 利用JavaScript實(shí)現(xiàn)靜態(tài)圖片局部流動(dòng)效果

    利用JavaScript實(shí)現(xiàn)靜態(tài)圖片局部流動(dòng)效果

    如果你有玩過《王者榮耀》、《陰陽師》?等手游,一定注意到過它的啟動(dòng)動(dòng)畫、皮膚立繪卡片等場(chǎng)景,經(jīng)常采用靜態(tài)底圖加局部液態(tài)流動(dòng)效果的簡(jiǎn)單動(dòng)畫,本文將利用JavaScript實(shí)現(xiàn)這一效果,需要的可以參考一下
    2022-08-08
  • B/S模式項(xiàng)目中常用的javascript匯總

    B/S模式項(xiàng)目中常用的javascript匯總

    本篇文章是對(duì)B/S模式項(xiàng)目中常用的javascript進(jìn)行了匯總介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 微信小程序三級(jí)聯(lián)動(dòng)選擇器使用方法

    微信小程序三級(jí)聯(lián)動(dòng)選擇器使用方法

    這篇文章主要為大家詳細(xì)介紹了微信小程序三級(jí)聯(lián)動(dòng)選擇器使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • JS實(shí)現(xiàn)加載和讀取XML文件的方法詳解

    JS實(shí)現(xiàn)加載和讀取XML文件的方法詳解

    這篇文章主要介紹了JS實(shí)現(xiàn)加載和讀取XML文件的方法,結(jié)合實(shí)例形式分析了javascript針對(duì)xml文件的加載與讀取相關(guān)實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-04-04
  • cocos2dx骨骼動(dòng)畫Armature源碼剖析(二)

    cocos2dx骨骼動(dòng)畫Armature源碼剖析(二)

    本篇主要給大家介紹cocos2dx骨骼動(dòng)畫Armature源碼剖析之flash中數(shù)據(jù)與xml中數(shù)據(jù)關(guān)系,需要的朋友一起來學(xué)習(xí)吧
    2015-09-09

最新評(píng)論

竹山县| 临洮县| 太和县| 永昌县| 崇明县| 台北市| 雅江县| 靖州| 包头市| 聊城市| 扶风县| 大安市| 阿鲁科尔沁旗| 泾阳县| 仙桃市| 胶州市| 曲麻莱县| 外汇| 上林县| 南投县| 达日县| 福海县| 临沭县| 子长县| 静乐县| 益阳市| 筠连县| 河北省| 博爱县| 延安市| 隆子县| 贞丰县| 牡丹江市| 朝阳县| 田阳县| 定边县| 奉贤区| 万荣县| 达拉特旗| 武穴市| 甘泉县|