由于touchstart/touchend在大多数桌面浏览器中尚未支持。如何创建与mousedown事件相同的touchstart事件(所有浏览器均支持该事件)。浏览器中的jquery touchstart
我想是这样的
$('obj').bind('touchstart', function(e){
});
将被翻译成
$('obj').bind('mousedown', function(e){
})
由于touchstart/touchend在大多数桌面浏览器中尚未支持。如何创建与mousedown事件相同的touchstart事件(所有浏览器均支持该事件)。浏览器中的jquery touchstart
我想是这样的
$('obj').bind('touchstart', function(e){
});
将被翻译成
$('obj').bind('mousedown', function(e){
})
您可以一次地结合......
$('obj').bind('touchstart mousedown', function(e){
});
如果你想mousedown
事件自动消防touchstart
事件(所以你只需要绑定touchstart
)使用...
$(document).bind('mousedown', function(event) {
$(event.target).trigger('touchstart');
});
注意,这意味着自定义touchstart
事件可以触发之前mousedown
事件必须传播到document
。这可能会有意想不到的副作用。
尝试是这样的:
var clickEventType = ((document.ontouchstart!==null)?'click':'touchstart');
$('obj').bind(clickEventType, function(e){});
更重要的是,使用。对()进行绑定:
$('body').on(clickEventType, 'obj', function(e){});
此检查文件,看是否存在touchstart,如果这样做,那么你的活动如果它不是(大多数桌面浏览器),那么它是'touchstart',然后是'click'。
您也可以触发使用相同的事件类型:
$('obj').trigger(clickEventType);
我也要求它,所以你可以复制和粘贴整个事情:https://gist.github.com/esteinborn/9398782 – 2014-03-06 20:32:00
这不是最好的解决办法,但我发现到现在最好的。倒台?它只能在首先触摸发生,所以你不能同步使用:(
var isTouch = false;
$('body').on('touchstart', function() {
isTouch = true;
});
您也可以检查,如果浏览器支持触摸先用Modernizr的例如。
记得做在全球范围内不使用它(除非你必须),你也可以通过在isTouch = true
代码后添加is-touch-device class到Html标签来将其更改为“modernizr”类似的代码:$('html').addClass('is-touch-device')
。在这种情况下,你可以从任何地方引用它(也可以从css)
这些解决方案可能被证明是有点问题,如果在某些时候这两个事件将由sa支持我的设备。 – epeleg 2012-06-21 07:54:34
@epeleg当然。在这种情况下,你会在文档或类似文件中使用''ontouchstart''的代码,然后相应地选择你的事件名称。 – alex 2014-02-14 23:18:43
也许像'if(Modernizr.touchstart){}'会是合适的吗? – philtune 2015-01-30 14:18:08