С jQuery как да откривам/насочвам докосване, но не и щракване?

Имам подсказка, която се активира (показва), когато целевият текст се задържи над него. За сензорни устройства човекът може да щракне върху целевия текст и подсказката ще се покаже, след което, когато докосне ИНСТРУМЕНТА (не целевия текст), подсказката се скрива. Но искам човекът с мишката да може да избира текста в подсказката, проблемът е, че когато кликне върху подсказката, тя се скрива, което е функционалността за сензорните устройства.

И така, за компютри (с мишка) искам подсказката да може да се щраква, без да се скрие, но на сензорни устройства искам подсказката да се скрие, когато се щракне, за да е по-лесно за потребителя. Надявам се, че има смисъл.

Какъв е най-добрият начин да се справим с това? Има ли начин да кажа "при докосване направете това, но при щракване (с мишка) направете онова"?

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


person android.nick    schedule 05.03.2012    source източник
comment
jquerymobile.com   -  person Rizwan Mumtaz    schedule 05.03.2012


Отговори (1)


Това вероятно е прекалено, но това са някои 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;
};

По принцип искате да се свържете с touchstart, touchmove и touchend. Или може би просто touchstart за това, което правите.

person JoshNaro    schedule 05.03.2012