2014-05-13 136 views
2

我在js中修改touchevents。我在eclipse中的logcat中遇到了這個錯誤。Uncaught TypeError:無法讀取屬性'pageX'的undefined

document.getElementById("squareBracket"). 
    addEventListener("touchmove", touchHandler, false); 
document.getElementById("squareBracket"). 
    addEventListener("touchend", touchHandler, false); 

function touchHandler(e) { 
if (e.type == "touchstart") { 
alert("You touched the screen!"); 
    } else if (e.type == "touchmove") { 
// alert(e.changedTouches[0].pageX); 
// alert(e.changedTouches[0].pageY); 
} else if (e.type == "touchend" || e.type == "touchcancel") { 
    alert('X :' + e.targetTouches[0].pageX); 
    alert('Y :' + e.targetTouches[0].pageY); 
} 
} 

如果我刪除在if評論中touchmove,座標彈出。但是,如果它被評論,我的logcat中的錯誤出現。

+0

首先,評論不會影響你的logcat錯誤。看來e.targetTouches [0]爲空或未定義。請注意它在第一種情況下是「changedTouches」,在第二種情況下是「targetTouches」。 – cosmincalistru

+0

所以我應該把它改成'changedtouches'? – Jeongbebs

回答

3

你應該開始理解targetTouches,changedTouches的差異,倒是這裏:Variation of e.touches, e.targetTouches and e.changedTouches

你的情況在touchend的時刻或touchcancel的targetTouches列表爲空和信息保留在changedTouches。

改變你的代碼:

alert('X :' + e.changedTouches[0].pageX); 
alert('Y :' + e.changedTouches[0].pageY); 

應該做的伎倆。

+0

,所以我可以將開始座標保存在'changedTouches [0]'和結束座標'changedtouches [1]'?謝謝。 – Jeongbebs

+0

是的,但是您應該經常檢查if(e.changedTouches [0] && e.changedTouches [1]){...}是否在觸摸列表中有可用項目,以確保有兩次觸摸。 –

+0

hey Dennis我加了這段代碼'if(e.type ==「touchmove」){ \t startX = e.changedTouches [0] .pageX; \t startY = e.changedTouches [0] .pageY; (e.type ==「touchend」|| e.type ==「touchcancel」){ \t endX = e.changedTouches [0] .pageX; \t endY = e.changedTouches [0] .pageY; \t alert(startX + endX); }' 它只顯示結束座標,爲什麼? – Jeongbebs

相關問題