iOS10 Safari不識別viewport禁用縮放的暴力解決方案


移動設備升級到iOS10了,發現了自帶的Safari瀏覽器不再識別meta viewport。以前我們都是用這個標簽來讓瀏覽器禁用縮放的。萬惡的Apple~~

網上看到了一段解決方案,測試了一下確實不錯,就拿來了。
在iOS10之前都是通過

<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">

來強制不讓手機瀏覽器縮放的,但是升級到iOS10后Safari不再識別這個meta標簽。所以得用js來hack一下:
禁用雙指縮放

document.documentElement.addEventListener('touchstart', function (event) {
  if (event.touches.length > 1) {
    event.preventDefault();
  }
}, false);

禁用手指雙擊縮放

var lastTouchEnd = 0;
document.documentElement.addEventListener('touchend', function (event) {
  var now = Date.now();
  if (now - lastTouchEnd <= 300) {
    event.preventDefault();
  }
  lastTouchEnd = now;
}, false);

當然,我測試,如果在iOS10的Safari中設置了viewport,其實雙擊放大也是不生效的,所以個人覺得在iOS10上比較好的解決方案是先設置viewport,然后再用js禁用雙指縮放即可,無需再設置禁用雙擊縮放

同時給出這個解決方案的作者還提出了一個有情提示,如果任何一個子元素的touch事件設置了stopPropagation阻止事件冒泡的話,可能還是會失效,而且在iOS10中你的輸入框字體最好不要小於16px,否則iOS在輸入框獲得焦點時可能還是會強制放大。

 

當設置<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">后,

安卓是可以禁用縮放,而IOS不能禁用縮放,所以更加的方案是判斷此時的設備是不是IOS蘋果機型,如下代碼 1 // 禁用IOS雙指縮放, 安卓則不需要下面這個段代碼

 
         
 1     // 禁用IOS雙指縮放和雙擊縮放, 安卓則不需要下面這個段代碼
 2    
 3    (function() {
 4             var agent = navigator.userAgent.toLowerCase();        //檢測是否是ios
 5 
 6             if(agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0){
 7                 
 8                 // 禁用雙指縮放
 9                 document.documentElement.addEventListener('touchstart', function (event) {
10                     if (event.touches.length > 1) {
11                         event.preventDefault();
12                     }
13                 }, false);
14                 
15                 // 禁用雙擊縮放
16                 var lastTouchEnd=0;  
17                 document.addEventListener('touchend',function (event) {  
18                     var now=(new Date()).getTime();  
19                     if(now-lastTouchEnd<=300){  
20                         event.preventDefault();  
21                     }  
22                     lastTouchEnd=now;  
23                 },false)  
24             } 
25    })()
 
         

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM