現版本小程式暫時無法監聽webview頁面高度改變
能實現的方式有在web-view組建的小程式js內,實時監聽高度,當通過拉起導航欄等操作導致視窗高度不一致的時候,將更改的高度當作新的網址引數,將會重新載入網頁,或者類似ajax獲取部分引數,將變化的高度傳送到伺服器上,然後html網頁內通過ajax請求伺服器獲取這個高度;只有每次onshow的時候能監聽到新的高度,定時器監聽不到改變;
//小程式內
setIntervar(findHeight,5000)
function findHeight(){
wx.getSystemInfo({
success: function (res) {
console.log(res.screenHeight)
console.log(res.windowHeight)
console.log(res)
},
})
}
複製程式碼
- 在html網頁對應的js內讀取此時的螢幕解析度,可用高度,onresize,offsetBottom這些也無法監聽到視窗高度的改變;
//web頁面內
setInterval(function(){
console.log("document.body.offsetHeight: "+document.body.offsetHeight)
console.log("document.body.clientHeight "+document.body.clientHeight)
console.log("document.body.scrollHeight "+document.body.scrollHeight)
console.log("window.screen.availHeight "+window.screen.availHeight)
//舉例在小程式web-view網頁內,拉起和隱藏手機導航欄
//未拉起導航欄時,前三個值為568,第四個值為640
//小程式內的拉伸起導航欄,前三個值為526,第四個值為640
//無論哪種情況,只要web-view的頁面一載入進來,就不會隨導航欄的拉伸高度而發生任何改變
},10000)
複製程式碼
- 提供的一種實現根據導航欄是否拉起的不同樣式實現的思路,在某些場景下:
- 當發現導航欄拉起,導致此時的某兩個元素的offsetTop距離接近,或者為負數時,考慮設定margin-top等css樣式來改變,但可能會存在以下4的問題;
- 建議不用考慮華為等手機是否拉起導航欄的問題,高度用百分比,因為如果不能讀取高度改變,那麼某些手機的導航欄是無法隱藏的,可能會發生導致初始的樣式有問題;