更靠譜的移動端橫豎屏檢測方法

2021-09-23 07:23:07 字數 3284 閱讀 4810

前不久,做了乙個h5專案,需要在橫豎屏變化時,做一些處理。毫無疑問,需要使用orientationchange來監聽橫豎屏的變化。

方案一:

// 監聽 orientation changes 

window.addeventlistener("orientationchange"

, function

(event) , false

);  

**新增上後,就各種相容性問題。這裡相容性問題出現在兩個地方:

如下是orientationchange事件的相容性:

如下是screen.orientation的相容性:

方案二:

上述方案不行,只能另行他法了。google一下,了解到可以通過resize配合(window.inner/outerwidth, window.inner/outerheight)來實現:

window.addeventlistener(

"resize"

, function

(event)  else

}, false

);  

這種方案基本滿足大部分專案的需求,但是還是有些不足之處:

關鍵**如下:

var resizecb = 

function

() else

return

function

() } else } 

} }(); 

完整**猛擊這裡

方案三:

不過個人覺得通過window.innerwidth > window.innerheight來實現的是一種偽檢測,有點不可靠。 可不可以通過瀏覽器來實現檢測?如基於css3@media**查詢來實現。

如下@media相容性:

如上上圖所示,移動端瀏覽器都支援css3 media。

實現思路:

這裡我選擇的節點font-family作為檢測樣式屬性。理由如下:

1.優先使用排在前面的字型。

2.如果找不到該種字型,或者該種字型不包括所要渲染的文字,則使用下一種字型。

3.如果所列出的字型,都無法滿足需要,則讓作業系統自行決定使用哪種字型。

這樣我們就可以指定特定標識來標識橫豎屏的狀態,不過需要將指定的標識放置在其他字型的前面,這樣就不會引起hmtl字型的變化。

關鍵**如下:

// callback 

var resizecb = function

()  } @media (orientation: landscape) }'

; // 載入樣式         

loadstylestring(cssstr); 

// 新增類 

html.classname = 'orientation'

+ html.classname; 

if (hstyle['font-family'

] === pstr)  else

return

function

()  

} else } 

} }(); 

完整**猛擊這裡

測試效果

方案四:

可以再改進一下,在支援orientationchange時,就使用原生的orientationchange,不支援則使用方案三。

關鍵**如下:

// 是否支援orientationchange事件 

var isorientation = ('orientation'

inwindow && 

'onorientationchange'

inwindow); 

// callback 

var orientationcb = function

(e)  

if (win.orientation === 90 || win.orientation === -90)  

return

function

()  

if (win.orientation === 90 || win.orientation === -90)  

event.trigger

(eventtype, meta); 

} }; 

var callback = isorientation ? orientationcb() : (function

()  

})(); 

// 監聽 

win.addeventlistener(isorientation ? eventtype : 'resize'

, callback, 

false

);  

完整**猛擊這裡

方案五:

目前,上述幾種方案都是通過自定製的訂閱與發布事件模式來實現的。這裡可以基於瀏覽器的事件機制,來模擬orientationchange。即對orientationchange的不相容進行修復。

關鍵**如下:

var eventtype = 

'orientationchange'

; // 觸發原生orientationchange 

var fire = function

()  else

else

if (win[

'on'

+ eventtype])  else } 

更靠譜的橫豎屏檢測方法

前不久,做了乙個h5專案,需要在橫豎屏變化時,做一些處理。毫無疑問,需要使用orientationchange來監聽橫豎屏的變化。方案一 監聽 orientation changes window.addeventlistener orientationchange function event f...

更靠譜的橫豎屏檢測方法

前不久,做了乙個h5專案,需要在橫豎屏變化時,做一些處理。毫無疑問,需要使用orientationchange來監聽橫豎屏的變化。方案一 監聽 orientation changes window.addeventlistener orientationchange function event f...

js判斷移動端橫豎屏狀態

function hengshuping if window.orientation 90 window.orientation 90 相容寫法 window.addeventlistener onorientationchange in window orientationchange resiz...