2012-03-05 20 views
1

我有一個工具提示,當目標文本懸停時激活(顯示)。對於觸摸設備,用戶可以單擊目標文本並顯示工具提示,然後當他們觸摸TOOLTIP(不是目標文本)時,工具提示將隱藏。但我希望帶鼠標的人能夠選擇工具提示中的文本,問題是當他們點擊工具提示時,它隱藏起來,這是觸摸設備的功能。因此,對於計算機(帶有鼠標),我希望工具提示可以在不隱藏的情況下點擊,但是在觸摸設備上,我希望工具提示在點擊時隱藏,以方便用戶。希望這是有道理的。jQuery如何檢測/目標觸摸但不是點擊?

這是什麼最好的方法呢?有沒有辦法讓我說:「當觸摸,做到這一點,但點擊(用鼠標),做到這一點」?

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

+0

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

回答

2

這可能是矯枉過正,但這些都是一些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爲你在做什麼。