すべてのズーム機能を無効にすることなく、ブラウザー (タッチ デバイス) の指定された要素のダブルタップ ズーム機能を無効にしたいと考えています。
例: 1 つの要素を複数回タップすると、何かが発生します。これはデスクトップ ブラウザーでは正常に機能しますが (予想どおり)、タッチ デバイス ブラウザーでは拡大されます。
<head>
<title>Site</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
etc...
</head>
私はそれをごく最近使用しましたが、iPadで正常に動作します。Android やその他のデバイスではテストしていません (Web サイトは iPad でのみ表示されるため)。
回答の下のコメントを読まない人もいるので、質問に適切に回答したかっただけです。だからここにあります:
(function($) {
$.fn.nodoubletapzoom = function() {
$(this).bind('touchstart', function preventZoom(e) {
var t2 = e.timeStamp
, t1 = $(this).data('lastTouch') || t2
, dt = t2 - t1
, fingers = e.originalEvent.touches.length;
$(this).data('lastTouch', t2);
if (!dt || dt > 500 || fingers > 1) return; // not double-tap
e.preventDefault(); // double tap - prevent the zoom
// also synthesize click events we just swallowed up
$(this).trigger('click').trigger('click');
});
};
})(jQuery);
これは私が書いたのではなく、変更しただけです。ここで iOS 専用バージョンを見つけました: https://gist.github.com/2047491 (Kablam に感謝)
jQuery なしで動作するバージョンが必要な場合は、バニラ JavaScript を使用するように Wouter Konecny の回答 (Johan Sundström がこの要点を変更して作成したもの)を変更しました。
function preventZoom(e) {
var t2 = e.timeStamp;
var t1 = e.currentTarget.dataset.lastTouch || t2;
var dt = t2 - t1;
var fingers = e.touches.length;
e.currentTarget.dataset.lastTouch = t2;
if (!dt || dt > 500 || fingers > 1) return; // not double-tap
e.preventDefault();
e.target.click();
}
touchstart
次に、この関数を呼び出すイベント ハンドラーを追加します。
myButton.addEventListener('touchstart', preventZoom);
この他の回答https://stackoverflow.com/a/42288386/1128216で説明されているように、cssプロパティtouch-action
を設定する必要がありますnone
.disable-doubletap-to-zoom {
touch-action: none;
}
どうぞ
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">