2013-05-14 1 views
2

나는 현재이 있습니다취급 터치 기반 이벤트 내 터치 이벤트에 대한

if('ontouchstart' in document.body) { 
    usevkeys = true; 
    canvas.addEventListener("touchstart",function(e) {evt.call(this,e);},false); 
    canvas.addEventListener("touchend",function(e) {evt.call(this,e);},false); 
    canvas.addEventListener("touchmove",function(e) {evt.call(this,e);},false); 
} 
else { 
    canvas.addEventListener("mousemove",function(e) {evt.call(this,e);},false); 
    canvas.addEventListener("click",function(e) {evt.call(this,e);},false); 
} 

이 내 노트북에 잘 작동하고, 내 전화. 그러나 나는 이것이 터치 스크린과 일반 마우스를 모두 가지고있는 환경에서 어떻게 반응 할까? 마우스가 mousemove 이벤트를 트리거하는 것처럼 터치 이벤트를 트리거합니까?

제대로 작동하려면 어떻게해야합니까?

+0

도움이 될지 모르겠지만 Modernizr은'if (('ontouchstart'in window) || window.DocumentTouch && document instanceof DocumentTouch) {'를 사용합니다. 그걸 좁히는 데 도움이 될지 궁금해? 귀하의 질문을 다시 읽으면서, 나는 응답/도움이되는지 잘 모르겠습니다. – Ian

+0

'else {'와'}'를 제거하고 방금 남겨두면'mousemove'와'click' 이벤트가 항상 바인딩되어 있습니까? 그렇게하면 터치 이벤트가있는 경우 해당 이벤트가 바인딩되지만 일반 마우스 이벤트는 항상 바인딩됩니다. 터치 이벤트가 발생하면 마우스 이벤트가 발생합니다. 아니면 일부 이벤트가 겹 칩니 까? 'touchmove'와'mousemove' 이벤트와 같은? – Ian

+0

터치 이벤트가 지원되지만 USB 마우스가 사용되는 경우 (터치 이벤트없이) 마우스 이벤트가 발생할 수 있음을 경험했습니다 (OS에 따라 다를 수 있음). 나는 항상 들어갔다. 터치 스타트가 처음으로 발사 될 때 마우스 이벤트 리스너를 모두 관찰하고 설정을 해제했다. 이것은 불필요한 이벤트 리스너를 저장하고 컨트롤을 제공한다. –

답변

0

touchstarttouchend이 실행되는 즉시 (-> 취소되지 않은 경우) click 이벤트를 트리거합니다. 그래서 else 절을 ​​제거해야합니다.

마이크로 소프트는 IE10에서 터치 이벤트와 다른 방식으로 모든 포인터 장치를 Pointer and gesture events으로 조화시켜 마우스, 펜 또는 손가락으로 발사되었는지 확인할 수 있습니다. 미래.

+0

글쎄, 원래 시도한 것이다. 그러나 문제는 내 휴대 전화가 이상한 결과가 나오는 '마우스 우드 (mousemove)'이벤트를 유발하여 깜박임이 발생하고 사용할 수 없게 만드는 것입니다. –

+0

클릭/터치 시작 기능 내에서 mousemove/touchmove 이벤트를 첨부 해보십시오. 나는 내 코드를 opensrc하고 싶습니다.하지만 미안합니다. – japrescott

+0

전화가 첫 번째 클릭과 같은 터치에서 '클릭'이벤트를 발생시키고 이후 터치가 버그가 발생하기 때문에 여전히 많은 도움이되지 않습니다. –

관련 문제