Ipad 在iOS MobileSafari中防止默认按下而不是默认拖动?

Ipad 在iOS MobileSafari中防止默认按下而不是默认拖动?,ipad,web-applications,webkit,mobile-safari,touch-event,Ipad,Web Applications,Webkit,Mobile Safari,Touch Event,上下文:MobileSafari/iPad上的Web应用程序,全屏和嵌入iframe 目标:提供自定义事件处理程序的技术,用于按住并点击,但不按住(缩放)或拖动(滚动/平移)。我们希望为Press提供自定义行为,但仍让Safari处理滚动/平移/缩放 问题:这两个目标似乎相互排斥。要防止按下手势的默认行为,必须调用以立即响应。但是,要让默认行为在拖动时继续,我们必须在初始启动时调用event.preventDefault。一旦调用了preventDefault,就无法在手势序列中恢复默认行为(即

上下文:MobileSafari/iPad上的Web应用程序,全屏和嵌入iframe

目标:提供自定义事件处理程序的技术,用于按住并点击,但不按住(缩放)或拖动(滚动/平移)。我们希望为Press提供自定义行为,但仍让Safari处理滚动/平移/缩放

问题:这两个目标似乎相互排斥。要防止按下手势的默认行为,必须调用以立即响应。但是,要让默认行为在拖动时继续,我们必须在初始启动时调用event.preventDefault。一旦调用了preventDefault,就无法在手势序列中恢复默认行为(即,直到所有手指都松开)。在发生某些移动之前,无法识别拖动

拖动是最简单的示例,但我们关心的是如何获得挤压和双击的默认行为。我们从不希望默认的MobileSafari Press“复制图像”或选择文本的行为

迄今为止的努力:

  • 保存ontouchstart事件,并在稍后调用preventDefault(在识别按键之前)。没有效果
  • 侦听“”。不,默认按下行为未通过此事件发出信号或路由
  • 防止所有ontouch*处理程序中出现默认情况,然后当我们识别出拖动/挤压手势时,使用和/或模拟新事件。以编程方式创建的事件会影响我们所有的回调,但Safari似乎不关注它们,不会触发任何默认行为
  • 用假动作打破Safari对媒体的认可。Safari取消了一个最轻微的移动,但我们允许一点斜坡新闻。在ontouchstart之后模拟移动事件(如上所述)不会导致Safari在手指未“真正”移动的情况下无法识别按压
我们有一套功能齐全的手势识别器(Javascript,ontouch*),采用苹果的风格。我们识别任何手势都没有问题,只是不知道有什么好方法可以复制Safari免费提供的缩放/平移/双击行为

我们不需要代码;我们正在寻找任何能够带来合理成功的理论解决方案(除了“自己也可以实现平移/缩放”,不过如果您有一种我们感兴趣的巧妙方法)。我们也有兴趣了解其他类似的尝试——当然我们不可能是第一个尝试的人


交替TL;DR:除了在touchstart中,还有什么方法可以阻止默认按下(也称为点击并按住)吗?

丑陋的可能性:不要阻止按下-使默认按下不起任何作用。尝试使用玻璃面板div,它可以捕捉所有触摸,并且不会阻止touchstart上的任何内容

div确实有默认的按下行为(某种类型的选择),但也许可以通过
而不是通过preventdavault关闭它


这意味着我们必须进行自己的命中测试,以确定将已识别事件传递给哪些DOM节点,因为我们不能让事件在DOM祖先链中冒泡。

成功:完全通过CSS而不是preventDefault来防止“默认按下”行为。此答案由Safari Technologies布道者提供(需要注册)

我在你的帖子上看到 你说你的最终目标是:

“我们从不想要默认值 MobileSafari出版社的“复制”行为 “图像”或选择文本

这些行为可以在CSS中禁用 (+一个奖金财产,因为 经常要关闭高光 如果他们要关掉其他的 行为):

评论:我们假设Safari的新闻行为是基于事件的,而不是由CSS驱动的。调用preventDefault-ontouchstart确实会取消新闻界的行为(这确实是我们误入歧途的原因),但这似乎是一个意外的副作用。实际上,MobileSafari不会执行“新闻事件”,而会执行“新闻上的CSS”

使用CSS禁用Press行为使我们能够在实际需要时再次调用preventDefault

/* behavior */
-webkit-user-select: none;                /* disable cut copy paste */
-webkit-touch-callout: none;              /* disable callout, image save panel */
-webkit-tap-highlight-color: transparent; /* "turn off" link highlight */