[英]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應用程序中這樣做了:
注冊事件聽眾:
var touchStartTimeStamp = 0; var touchEndTimeStamp = 0; window.addEventListener('touchstart', onTouchStart,false); window.addEventListener('touchend', onTouchEnd,false);
增加的功能:
var timer; function onTouchStart(e) { touchStartTimeStamp = e.timeStamp; } function onTouchEnd(e) { touchEndTimeStamp = e.timeStamp; console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds }
檢查時差,做了我的東西
我希望這將有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.