2013-05-14 2 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' в окне) || window.DocumentTouch && document instanceof DocumentTouch) {'. Интересно, помогает ли это сузить его? Когда я перечитаю ваш вопрос, я не уверен, что я отвечаю/помогаю. – Ian

+0

Что делать, если вы избавились от 'else {' и '}' и просто оставили его так, что события 'mousemove' и' click' всегда связаны? Таким образом, если есть события касания, они связаны, но обычные события мыши всегда связаны. Если они касаются экрана, происходят события касания, в противном случае происходят события мыши. Или некоторые из событий перекрываются? Такие, как события «touchmove» и «mousemove»? – Ian

+0

Я чувствовал, что, хотя сенсорные события поддерживаются, события мыши могут происходить (без сенсорных событий), если используется мышь USB (возможно, в зависимости от ОС). Я всегда занимался: наблюдал и то, и другое, что отключил прослушиватель событий мыши при первом запуске touchstart ... это экономит ненужные прослушиватели событий и дает вам контроль –

ответ

0

a touchstart инициирует событие click, как только touchend уволен (-> если он не был отменен). Поэтому вы должны просто удалить предложение else, и все должно быть хорошо!

Microsoft пошла по-другому со своими событиями касания в IE10, чтобы согласовать все указательные устройства в Pointer and gesture events, где вы можете проверить, была ли она уволена мышью, ручкой или пальцем - или, возможно, устройством типа kinect в будущее.

+0

Ну, это то, что я пробовал изначально. Проблема в том, что мой телефон будет запускать события «mousemove» с нечетными результатами, вызывая мерцание и делая его непригодным. –

+0

попробуйте добавить событие mousemove/touchmove в функции click/touchstart. Я хотел бы открыть свой код, но мне не разрешено, извините. – japrescott

+0

Это все равно не очень хорошо, так как телефон будет запускать событие «щелчок» при первом касании, а затем последующие штрихи будут ошибочными. –

Смежные вопросы