2011-04-21 64 views
7

預先警告:我對js很陌生,主要通過搜索網絡搜索示例/教程來獲得。javascript等效於'mouseleave'的觸摸互動

我寫的js應該可以在網絡和移動設備上運行(例如iPad)。

我們有一個庫,幫助抽象掉mousetouch之間的差異:

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

我試圖找到相當於一個touchmouseleave,所以我可以做一個類似的伎倆。

我能想象的方式通過跟蹤move位置和比較,爲邊界問題widget的盒子搭上leave事件,但我希望有一個小的一行像touchstart/mousedown關係。

回答

7

它已經提出,但據我所知沒有實現: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

謝謝。我認爲關於「未實現」的一點是我需要聽到的,我倍加讚賞解決方法的示例代碼。 – 2011-04-21 21:46:21

+1

你的帖子已經過時了,但是 - 不應該是touchmove事件的「更換手機」嗎?至少在iPad上觸摸數組是undefined onTouchMove - 比較http://stackoverflow.com/a/7236327/818732 – 2012-07-14 11:51:01