2013-07-05 6 views
2

Я пишу HTML5-игру, которая обновляет холст на touchstart. На моей Galaxy Note 10.1 под управлением Android 4.1.1 экран занимает некоторое время, чтобы обновить после события touchstart. Я исследовал и пришел к выводу, что экран (просто любое изменение на экране) просто требует времени для обновления после сенсорного экрана. Вот демонстрация:Задержка экрана Android585 Android

<!DOCTYPE html> 
<html> 
<head> 
<script> 

document.addEventListener(
    'touchstart', 
    function(event) { 
     console.log('touchstart'); 

     document.getElementById('asdf').value = 'asdf'; 
    } 
); 

</script> 
</head> 
<body> 
<input id="asdf" value="qwer" type="text" /> 
</body> 
</html> 

Вот некоторые из сценариев:

  1. нажмите на экран, не перемещайте палец, не отпуская палец
    • вам нужно будет ждать около половины секунда, чтобы увидеть обновленное текстовое поле
  2. коснитесь экрана, переместите палец, не отпустите палец
    • экран будет обновляться в тот момент, вы перемещаете ваш палец
  3. нажмите на экран и отпустите
    • экран будет обновлен момент, когда вы отпустите палец

В во всех случаях событие touchstart запускается немедленно, просто обновление экрана задерживается. Похоже, что это связано с задержкой в ​​300 мс, которая вызывает событие клика, но проблема другая, это обновление экрана, которое задерживается. Я думаю, что я пробовал все очевидные вещи, например event.preventDefault, или вернул false, установив захват в true или false. Я также искал, но не могу найти подобную проблему.

И он отлично работает на моем iPad и моем телефоне Nexus One под управлением Android 2.3, экран обновляется сразу после touchstart.

Любые идеи?

ответ

2

После некоторого расследования я сдался. Кажется, это применимо только к браузеру акций. У браузера акций также есть некоторые очень странные проблемы, я думаю, что я просто не буду поддерживать поддержку браузера.

+0

И, конечно же, вы потратили много времени на это расследование. Я сделал. –

1

Я откинул эту ошибку до метка viewport-meta. Если у вас есть эта ошибка, ваш, вероятно, выглядит примерно так:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> 

Эта конфигурация тега позволяет пользователю масштабирования с травмировать или двойное нажатие.

Попробуйте удалить «maximum-scale = 1, user-scaleable = 0». Это оставляет тег следующим образом:

<meta name="viewport" content="width=device-width, initial-scale=1"> 

Это должно заставить touchstart вести себя правильно. Но теперь пользователь может увеличить страницу! Но если вы добавите обратно в «maximum-scale = 1» или «user-scalable = 0», он убьет touchstart.

Вместо того, чтобы добавлять «максимальный масштаб = 1», попробуйте «максимальный масштаб = 1,01».

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.01"> 

Touchstart работает, как ожидалось в настоящее время, и даже то пользователь может увеличить страницу, они могут только увеличить его чуть-чуть.