jQuery如何检测/目标触摸但不是点击?

问题描述:

我有一个工具提示,当目标文本悬停时激活(显示)。对于触摸设备,用户可以单击目标文本并显示工具提示,然后当他们触摸TOOLTIP(不是目标文本)时,工具提示将隐藏。但我希望带鼠标的人能够选择工具提示中的文本,问题是当他们点击工具提示时,它隐藏起来,这是触摸设备的功能。因此,对于计算机(带有鼠标),我希望工具提示可以在不隐藏的情况下点击,但是在触摸设备上,我希望工具提示在点击时隐藏,以方便用户。希望这是有道理的。jQuery如何检测/目标触摸但不是点击?

这是什么最好的方法呢?有没有办法让我说:“当触摸,做到这一点,但点击(用鼠标),做到这一点”?

http://jsfiddle.net/nicktheandroid/fdWW5/4/

+0

http://jquerymobile.com/ – 2012-03-05 17:06:43

这可能是矫枉过正,但这些都是一些jQuery的扩展,我使用促进跨浏览器的触摸事件:

jQuery.fn.touchstart = function (callback) { 
this.each(function() { 
var _self = jQuery(this); 
var onTouchstart = function (ev) { 
    if (ev.originalEvent) { 
    if (ev.originalEvent.targetTouches) { 
     AddTouchPropertiesToJQEventObject(ev); 
     callback.call(this, ev); 
    } 
    } 
}; 
_self.bind('touchstart', onTouchstart); 
}); 
return this; 
}; 

jQuery.fn.touchmove = function (callback) { 
this.each(function() { 
var _self = jQuery(this); 
var onTouchMove = function (ev) { 
    if (ev.originalEvent) { 
    if (ev.originalEvent.targetTouches) { 
     AddTouchPropertiesToJQEventObject(ev); 
     callback.call(this, ev); 
    } 
    } 
}; 
_self.bind('touchmove', onTouchMove); 
}); 
return this; 
}; 

jQuery.fn.touchend = function (callback) { 
this.each(function() { 
var _self = jQuery(this); 
var onTouchEnd = function (ev) { 
    var lastTouchMoveInfo = _self.data('lastTouchMoveInfo'); 
    ev = $.extend(ev, lastTouchMoveInfo); 
    callback.call(this, ev); 
}; 
var onTouchMove = function (ev) { 
    var lastTouchMoveInfo = { 
    pageX: ev.pageX, 
    pageY: ev.pageY, 
    touches: ev.touches 
    }; 
    _self.data('lastTouchMoveInfo', lastTouchMoveInfo); 
}; 
_self.touchstart(onTouchMove); 
_self.touchmove(onTouchMove); 
_self.bind('touchend', onTouchEnd); 
}); 
return this; 
}; 

var AddTouchPropertiesToJQEventObject = function (jqEventObject) { 
    jqEventObject.pageX = jqEventObject.originalEvent.targetTouches[0].pageX; 
    jqEventObject.pageY = jqEventObject.originalEvent.targetTouches[0].pageY; 
    jqEventObject.rotation = jqEventObject.originalEvent.rotation; 
    jqEventObject.scale = jqEventObject.originalEvent.scale; 
    jqEventObject.targetTouches = jqEventObject.originalEvent.targetTouches; 
    jqEventObject.touches = jqEventObject.originalEvent.touches; 
}; 

基本上你要绑定到touchstarttouchmovetouchend。或者,也许只是touchstart为你在做什么。