IOS、iPhone移動端,表單input聚焦時頁面放大的解決辦法

  • 2019 年 12 月 2 日
  • 筆記

最近的一個項目中,發現幾個頁面在使用 iPhone 11 訪問的時候,點擊 inputtextarea 等文本輸入框聚焦 focus() 時,頁面會整體放大。

經檢查發現並沒有什麼特定的功能是讓頁面放大的,最後找到原因:蘋果覺得點擊輸入框放大是一個「很好」的體驗,就擅自把頁面給放大了,單純的用 meta 禁止頁面放大是沒有用的,可以使用下面兩種方法解決。

通過 mate 設置:

<meta name="apple-mobile-web-app-capable" content="yes">  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

拆解說明:

apple-mobile-web-app-capable 刪除蘋果的默認工具欄和菜單欄。

content 默認值為 no ,即正常顯示。如果設置為 yes,Web應用會以全屏模式運行,可以通過只讀屬性 window.navigator.standalone 來確定網頁是否以全屏模式顯示。

1、viewport meta 標籤:

瀏覽器的 viewport 是可以看到 Web 內容的窗口區域,通常與渲染出的頁面的大小不同,這種情況下,瀏覽器會提供滾動條以滾動訪問所有內容。

width 屬性控制視口的寬度。可以像 width=600 這樣設為確切的像素數,或者設為 device-width 特殊值,代表縮放為 100% 時以 CSS 像素計量的屏幕寬度。

相應的也有 heightdevice-height 屬性,可能對包含基於視口高度調整大小及位置的元素的頁面有用。 

initial-scale 屬性控制頁面最初加載時的縮放等級,即當頁面第一次 load 的時候縮放比例。

maximum-scale 屬性控制允許用戶縮放到的最大比例。

minimum-scale 屬性控制允許用戶縮放到的最小比例。

user-scalable 屬性控制用戶是否可以手動縮放。

2、用 JavaScript 強制修改:

window.onload = function () {    document.addEventListener('gesturestart', function (e) {      e.preventDefault();    });    document.addEventListener('dblclick', function (e) {      e.preventDefault();    });    document.addEventListener('touchstart', function (event) {      if (event.touches.length > 1) {        event.preventDefault();      }    });    var lastTouchEnd = 0;    document.addEventListener('touchend', function (event) {      var now = (new Date()).getTime();      if (now - lastTouchEnd <= 300) {        event.preventDefault();      }      lastTouchEnd = now;    }, false);  };

聲明:本文由w3h5原創,轉載請註明出處:《IOS、iPhone移動端,表單input聚焦時頁面放大的解決辦法》 https://www.w3h5.com/post/450.html