在触摸设备上的浏览器中禁用双击"缩放"选项

Wou*_*cny 84 html browser zoom touch

我想禁用浏览器中指定元素双击缩放功能(在触摸设备上),而不禁用所有缩放功能.

例如:可以多次点击一个元素以发生某些事情.这在桌面浏览器上运行良好(如预期的那样),但在触摸设备浏览器上,它会放大.

Ros*_*len 52

添加touch-action: manipulation到要禁用双击缩放的任何元素,如下面的disable-dbl-tap-zoom类:

.disable-dbl-tap-zoom {
  touch-action: manipulation;
}
Run Code Online (Sandbox Code Playgroud)

touch-action文档(强调我的):

操作

启用平移和捏合缩放手势,但禁用其他非标准手势,例如双击缩放.

我在这个页面上尝试了其他答案,但这是最简单,最可靠的解决方案.此值适用于Android和iOS.

  • 用触摸动作包裹你的整个身体有什么缺点:操纵? (4认同)
  • 当像这样应用时,在 iOS 14.6(手机,而不是平板电脑,使用 Safari)上工作正常:`input[type="button"]{ touch-action:manipulation; }`。我可以双击页面上的其他位置,它会缩放或有时会进行选择,但是当点击或什至只是靠近按钮时,它总是会触发该按钮并且不会执行任何其他操作。对于未来的读者,也许您可​​以更新顶部的编辑,说它适用于按钮,但可能(因为 Adam Silver 说它不适用于图像)不适用于其他元素? (3认同)
  • 双击图像时不适用于最新的 iOS。 (2认同)

Kab*_*lam 49

<head>
<title>Site</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 
etc...
</head>
Run Code Online (Sandbox Code Playgroud)

我最近才使用它,它在iPad上运行良好.尚未在Android或其他设备上进行测试(因为该网站仅在iPad上显示).

  • 由于Apple,不再适用于iOS 10. (28认同)
  • 这将禁用所有缩放功能,不幸的是,这不是我的问题.我想只禁用指定的元素. (14认同)
  • 这个解决方案怎么样?它只是iOS,但也许可以调整?:https://gist.github.com/2047491 (5认同)
  • 苹果现在正式忽略了这一点。https://github.com/w3c/html/issues/602 (5认同)
  • @WouterKonecny如果删除useragent检查,它应该适用于任何支持touchstart事件的设备.要检测这些设备,您可以使用类似[isEventSupported]的内容(http://perfectionkills.com/detecting-event-support-without-browser-sniffing/) (2认同)

Roc*_*160 38

我知道这可能已经过时了,但我找到了一个对我来说完美的解决方案.不需要疯狂的元标记和停止内容缩放.

我不是100%确定它是如何交叉设备的,但它确实是我想要的.

$('.no-zoom').bind('touchend', function(e) {
  e.preventDefault();
  // Add your code here. 
  $(this).click();
  // This line still calls the standard click event, in case the user needs to interact with the element that is being clicked on, but still avoids zooming in cases of double clicking.
})
Run Code Online (Sandbox Code Playgroud)

这将简单地禁用正常的点击功能,然后再次调用标准点击事件.这可以防止移动设备进行缩放,但其他功能正常.

编辑:这已经过时间测试,并在几个实时应用程序中运行.似乎是100%跨浏览器和平台.除非您在click事件之前需要自定义行为,否则上述代码应作为大多数情况下的复制粘贴解决方案.

  • 你不需要JS就可以设置CSS属性`pointer-events:none` (6认同)
  • 这会禁用点击,我认为这不是一个很好的解决方案,抱歉 (2认同)
  • 谢谢您,这对于处理增量/减量按钮非常有效,而无需禁用整个页面的缩放。 (2认同)
  • 此解决方案的问题是,如果您滚动页面并且手指恰好位于按钮上,它会认为您单击了它。 (2认同)

Wou*_*cny 29

我只是想正确回答我的问题,因为有些人没有阅读下面的评论答案.所以这里是:

(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);
Run Code Online (Sandbox Code Playgroud)

我没有写这个,我只是修改它.我在这里找到了iOS版本:https://gist.github.com/2047491(感谢Kablam)

  • jquery不是javascript,如果没有库,有一个如何做到这一点的例子会很高兴 (2认同)

Evr*_*mbe 13

如果你需要一个没有jQuery的版本,我修改了Wouter Konecny的答案(也是由JohanSundström修改这个要点创建的)来使用vanilla JavaScript.

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();
}
Run Code Online (Sandbox Code Playgroud)

然后添加一个touchstart调用此函数的事件处理程序:

myButton.addEventListener('touchstart', preventZoom); 
Run Code Online (Sandbox Code Playgroud)

  • 辉煌.只是想提一下我需要添加一个addEventListener才能调用它.`myButton.addEventListener('touchstart',preventZoom);` (2认同)

Jon*_*lez 10

您应的CSS属性设置touch-action,以none在该对方的回答中描述/sf/answers/2960187051/

.disable-doubletap-to-zoom {
    touch-action: none;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你只想摆脱双击缩放,你应该将值设置为'touch-action:manipulate;' 这仍然允许平移和捏缩放.重要说明:这也有助于摆脱为实现双击缩放而引入的点击延迟浏览器.请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action (2认同)

Erç*_*ğlu 9

* {
    -ms-touch-action: manipulation;
    touch-action: manipulation;
}
Run Code Online (Sandbox Code Playgroud)

禁用双击以放大触摸屏。包括 Internet Explorer。


Jay*_*Jay 8

CSS全局禁用双击缩放(在任何元素上):

  * {
      touch-action: manipulation;
  }
Run Code Online (Sandbox Code Playgroud)

操纵

启用平移和收缩缩放手势,但禁用其他非标准手势,例如双击以缩放。

谢谢罗斯,我的回答扩展了他的观点https : //stackoverflow.com/a/53236027/9986657


小智 8

在移动设备上禁用双击缩放(2023 IOS Safari 解决方案):

我发现使用元标记方法对于移动 safari 浏览器来说并不是一个可行的解决方案。这是对我有用的解决方案。

工作解决方案:

.selector {
   touch-action: manipulation;
}
Run Code Online (Sandbox Code Playgroud)

通过简单地添加操作的触摸动作,应用以下规则的所有按钮将不会在连续单击按钮时缩放。

示例网站:计算器应用程序


小智 5

不幸的是,上面的大部分编码都不起作用,这些简单的代码就可以做到

document.addEventListener('dblclick', function(event) {
    event.preventDefault();
}, { passive: false });
Run Code Online (Sandbox Code Playgroud)