开发者

How to change all onClick events to TouchStart on iOS?

开发者 https://www.devze.com 2023-03-16 08:36 出处:网络
OnClick event has a timeout ~400ms before 开发者_运维技巧executing on iOS-browser (demo). And I want to change it to TouchStart event for all DOM-elements who have onClick. How can i make it?

OnClick event has a timeout ~400ms before 开发者_运维技巧executing on iOS-browser (demo). And I want to change it to TouchStart event for all DOM-elements who have onClick. How can i make it?

I use jQuery and i tried check all elements for click function:

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


I don't have an exact answer, but I think you should be able to make this do what you want.

For every element on your page that has an OnClick, add a class - say TouchTarget. Then use this in your startup function.

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

Create a handler function that looks like this:

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

If you only want to register if touch is available, then you can protect the bind call with

if (Modernizr.touch) {
}

I believe the reason for the delay in OnClick is because Safari is waiting to see if the touch is really a click or a drag, or some other gesture. This will recognize a simple touch quickly. I normally bind both touchstart and touchend when I need quick touches so that touchstart provides visual feedback and then touchend does something with the "click". This method does not have a delay built in.


Use a product like http://www.jqtouch.com/ or the code snipped provided here: http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone.

0

精彩评论

暂无评论...
验证码 换一张
取 消