移動設備升級到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);
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);
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 })()