2011-01-17 3 views
8

Я получил возможность successfully play с сенсорным экраном, touchmove и touchhend на Android с помощью jQuery и HTML-страницы. Теперь я пытаюсь понять, что трюк заключается в том, чтобы определить длинное событие крана, где один отбирает и удерживает в течение 3 секунд. Кажется, я пока не понимаю этого. Я хочу это исключительно в jQuery без Sencha Touch, JQTouch, jQMobile и т. Д.Определение длинного нажатия (Long Press, Tap Hold) на Android с jQuery

Мне нравится концепция jQTouch, хотя она не дает мне многого, и некоторые из моих кодов ломаются вместе с ней. С Sencha Touch я не поклонник перехода от jQuery в Ext.js и некоторый новый способ абстракции Javascript, особенно когда jQuery настолько способен. Итак, я хочу понять это с помощью jQuery. Я смог выполнить многие функции jQTouch и Sencha Touch самостоятельно, используя jQuery. И jQMobile по-прежнему слишком бета-версии и не достаточно направлена ​​на Android.

ответ

11

Таймеры не используются, но будут стрелять только после того, как пользователь выпустит палец после длинного крана.

var startTime, endTime; 
var gbMove = false; 

window.addEventListener('touchstart',function(event) { 
    startTime = new Date().getTime(); 
    gbMove = false;   
},false); 

window.addEventListener('touchmove',function(event) { 
    gbMove = true; 
},false); 

window.addEventListener('touchend',function(event) { 
    endTime = new Date().getTime(); 
    if(!gbMove && (endTime-startTime)/1000 > 2) 
     alert('tap hold event');  
},false); 
7
var gnStartTime = 0; 
var gbMove = false; 
var gbStillTouching = false; 

function checkTapHold(nID) { 
    if ((!gbMove) && (gbStillTouching) && (gnStartTime == nID)) { 
    gnStartTime = 0; 
    gbMove = false; 
    alert('tap hold event');  
    } 
} 

window.addEventListener('touchstart',function(event) { 
    gbMove = false; 
    gbStillTouching = true; 
    gnStartTime = Number(new Date()); 
    setTimeout('checkTapHold(' + gnStartTime + ');',2000); 
},false); 

window.addEventListener('touchmove',function(event) { 
    gbMove = true; 
},false); 

window.addEventListener('touchend',function(event) { 
    gbStillTouching = false; 
},false); 
0

Почему бы не просто использовать таймер js? Я сделал что-то вроде:

i=0; 
$drink = document.getElementById('drink'); 
$drink.addEventListener('touchstart',function(event){ 
    $('#drink .mainBtnText').text('HOLD'); //mostly for debugging 
    t = window.setInterval(function(event){ 
      i+=.5; 
      if (i>=1){ 
       alert('taphold'); 
       window.clearInterval(t); 
       i=0; 
      } 
     },500); 
}); 
$drink.addEventListener('touchend',function(event){ 
    $('#drink .mainBtnText').text('Drink'); 
    i=0; 
    window.clearInterval(t); 
}); 

И у меня не было абсолютно никаких проблем с его до сих пор ... правда, я не сделал невероятно обширное тестирование устройства, но он работал на моем рабочем столе (с MouseDown/MouseUp), а также как HTC Droid Eris (Android 1.6) и мой Droid RAZR (Android 2.3) ...

+0

Это ведет себя правильно относительно касания/начала или окончания в разных местах, как ни странно. Не совсем уверен, почему он это делает, но я также не жалуюсь: P –

0

я сделал что-то вроде этого:

var touchCounter; 

window.addEventListener('touchstart', function() { 
    var count = 0; 
    touchCounter = setInterval(function() { 
    count++; 
    if (count == 10) alert('touch lasted 10 seconds'); 
    }, 1000); 
}); 

window.addEventListener('touchend', function() { 
    clearInterval(touchCounter); 
    touchCounter = null; 
}); 
0

Хотя это не JQuery, но я сделал это так в моем приложении для Android:

  1. зарегистрированных событий слушателей:

    var touchStartTimeStamp = 0; 
    var touchEndTimeStamp = 0; 
    
    window.addEventListener('touchstart', onTouchStart,false); 
    window.addEventListener('touchend', onTouchEnd,false); 
    
  2. добавлены функции:

    var timer; 
    function onTouchStart(e) { 
        touchStartTimeStamp = e.timeStamp; 
    } 
    
    function onTouchEnd(e) { 
        touchEndTimeStamp = e.timeStamp; 
    
        console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds 
    } 
    
  3. проверили разницу во времени и сделал мой материал

Я надеюсь, что это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^