javascript-эквивалент «mouseleave» для сенсорных взаимодействий - PullRequest
9 голосов
/ 21 апреля 2011

Предостережение: я очень новичок в js, и в основном я получил за счет поиска в Интернете примеров / учебников.

Я пишу js, которые должны работать как в Интернете, так и на мобильных устройствах (например, iPad)..

У нас есть библиотека, которая поможет абстрагироваться от различий между mouse и touch:

if (navigator.userAgent.search('Mobile') > 0) {
  window.FLAGS = {
    start: 'touchstart',
    end: 'touchend',
    move: 'touchmove',
    click: 'click',
    touchScreen: true
  };
} else {
  window.FLAGS = {
    start: 'mousedown',
    end: 'mouseup',
    move: 'mousemove',
    click: 'click',
    touchScreen: false
  };
}

Тогда в коде вы можете делать такие вещи, как:

widget.view.bind(FLAGS.start, function(e) {

Я пытаюсь найти touch эквивалент для mouseleave, чтобы я мог сделать подобный трюк.

Я могу представить способы поймать событие leave, отслеживая положение на moveи сравнивая это с ограничивающей рамкой виджета, о котором идет речь, но я надеюсь, что есть небольшая однострочная строка, такая как отношение touchstart / mousedown.

Ответы [ 2 ]

12 голосов
/ 21 апреля 2011

Было предложено, но не реализовано. AFAIK: http://www.quirksmode.org/mobile/advisoryTouch.html

Что-то вроде этого может сработать (писать это мне на голову, не проверено):

var element;
document.addEventListener('touchstart', function(event) {
    event.preventDefault();
    var touch = event.touches[0];
    element = document.elementFromPoint(touch.pageX,touch.pageY);
}, false);

document.addEventListener('touchmove', function(event) {
    event.preventDefault();
    var touch = event.touches[0];
    if (element !== document.elementFromPoint(touch.pageX,touch.pageY)) {
        touchleave();
    }
}, false);

function touchleave() { 
    console.log ("You're not touching the element anymore");
}
0 голосов
/ 21 апреля 2011

может захотеть проверить плагин jquery touchable .

...