如何在iOS上将所有onClick事件更改为TouchStart

How to change all onClick events to TouchStart on iOS?

本文关键字:事件 onClick TouchStart iOS      更新时间:2023-09-26

OnClick事件在iOS浏览器上执行之前有一个约400ms的超时(演示(。对于所有具有onClick的DOM元素,我想将其更改为TouchStart事件。我该怎么做?

我使用jQuery,并尝试检查点击功能的所有元素:

$('*').each(function() { 
  if($(this).click != null) {
    // BUT all elements in DOM has click
  }
})

我没有确切的答案,但我认为你应该能够随心所欲。

对于页面上每个有OnClick的元素,添加一个类,比如TouchTarget。然后在你的启动函数中使用这个。

$('.TouchTarget').bind('touchstart', function (e) {
    e.preventDefault();
    touchStart(e, this);
});

创建一个处理程序函数,如下所示:

function touchStart(pEvent, pElement) {
//Do something with the touch.
}

如果你只想在触摸可用的情况下注册,那么你可以用保护绑定呼叫

if (Modernizr.touch) {
}

我相信OnClick延迟的原因是Safari正在等待触摸是否真的是点击、拖动或其他手势。这将快速识别简单的触摸。当我需要快速触摸时,我通常会绑定touchstart和touchend,以便touchstart提供视觉反馈,然后touchend通过"点击"做一些事情。此方法没有内置延迟。

使用类似http://www.jqtouch.com/或此处提供的代码:http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone.