1. 程式人生 > >ios的微信瀏覽器輸入框失去焦點後頁面不能回彈

ios的微信瀏覽器輸入框失去焦點後頁面不能回彈

問題:註冊頁面,輸入完手機號和註冊密碼,點選獲取驗證碼,圖片驗證碼彈窗彈出,一切進行的都很完美。然而在ios微信瀏覽器裡面,無論點選哪裡,彈出層毫無響應。

開始排查問題:

  • 首先排除不是z-index導致元素點不到,進而無法觸發點選事件。

  • 因為使用vue框架,所以給click事件加上一個native修飾符,然而仍然毫無響應。

  • 然後再排除不是因為css導致無法觸發點選事件。

  • 直到滑一下頁面,才能正常響應點選事件。

一番搜尋嘗試之後,仍然不知道為什麼會出現這個bug,最後認為可能是微信瀏覽器在ios系統裡面的特殊表現,所以還是選擇滑動頁面來解決問題。

使用js滑動頁面應該不是什麼問題,可以使用document.body.scrollTop或者window.scrollTo()來控制頁面滑動。

最後我選擇在輸入框失去焦點時,使用window.scrollTop來滑動頁面。

程式碼如下

function kickBack() {
  window.scrollTo(0, document.body.scrollTop + 1);
  document.body.scrollTop >= 1 && window.scrollTo(0, document.body.scrollTop - 1);
}

寫完之後,自測發現時靈時不靈,怎麼辦?加setTimeout。

function kickBack() {
  setTimeout(() => {
    window.scrollTo(0, document.body.scrollTop + 1);
    document.body.scrollTop >= 1 && window.scrollTo(0, document.body.scrollTop - 1);  
  }, 10)
}

再測,發現完美解決問題。

然而為什麼這麼解決,卻是一臉懵。。。