簡體   English   中英

使用jQuery在Android上確定長按(長按,點按保持)

[英]Determining Long Tap (Long Press, Tap Hold) on Android with jQuery

我已經能夠使用jQuery和HTML頁面在Android上成功地使用touchstart,touchmove和touchend事件。 現在我想看看訣竅是什么,以確定一個長敲擊事件,其中一個點擊並保持3秒。 我似乎無法解決這個問題。 我想在沒有Sencha Touch,JQTouch,jQMobile等的jQuery中純粹這樣做。

我喜歡jQTouch的概念,雖然它並沒有為我提供很多東西,但我的一些代碼卻打破了它。 使用Sencha Touch,我不喜歡將jQuery轉移到Ext.js以及一些新的Javascript抽象方式,尤其是當jQuery非常強大時。 所以,我想單獨使用jQuery來解決這個問題。 我已經能夠使用jQuery自己做很多jQTouch和Sencha Touch的事情了。 並且jQMobile仍處於測試階段,尚未對Android進行足夠的指導。

定時器未使用但只會在用戶松開長按后松開手指。

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);
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);

為什么不使用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)......

我做了這樣的事情:

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;
});

雖然它不是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. 檢查時差,做了我的東西

我希望這將有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM