Chrome "Emulate Touch Events" не работает

Я включил опцию "Эмулировать сенсорные события" в Инструментах разработчика Chrome. Я установил простую тестовую программу, которая предупреждает, когда я касаюсь <div>, Программа отлично работает на моем Galaxy Nexus, но когда я нажимаю на <div> в Chrome даже при включенной опции "Эмулировать сенсорные события" ничего не происходит. Какие-либо предложения? Я правильно использую этот инструмент?

Вот мой код - ничего особенного.

<!DOCTYPE html>
<html lang="en">
<head>      
    <style type="text/css">
        #main_div
        {
            position: absolute;
            width: 50px;
            height: 20px;
            background-color: red;
            top: 50%;
            left: 20px;             
        }           
    </style>
    <script type="text/javascript">
        function init()
        {
            main_div = document.getElementById("main_div");             
            main_div.ontouchstart = function() 
            {                    
                 alert("here");
            }                               
        }
    </script>
</head>
<body onload="init()">
    <div>
        <p id="x">hello</p>
        <p id="y"></p>
    </div>
    <div id="main_div">
        hello
    </div>
</body>
</html>

6 ответов

Решение

Что меня озадачило, так это то, что в дополнение к установленному флажку "Эмулировать сенсорные события" необходимо также установить главный флажок "Включить", чтобы включить переопределения. Как только оба были проверены, все работало нормально.

События касания работают в Chrome версии 21 (не уверен в предыдущих версиях), НО вы должны держать окно инструментов разработчика открытым, чтобы происходили события касания. Если вы закроете окно, вы вернетесь к обычным событиям мыши.

Начиная с Chrome 69, в настройках нет ни панели переопределений, ни ящика эмулятора в консоли. Вместо этого вы можете нажать ... значок в представлении устройства, а затем выберите "Добавить тип устройства".

нажмите

Находясь в режиме ответа, вы увидите небольшой выпадающий список с опциями "Мобильный", "Мобильный (без сенсорного ввода)", "Рабочий стол" и "Рабочий стол (без сенсорного ввода)". Если вы этого не видите, увеличьте ширину области просмотра устройства. По умолчанию для режима Адаптивный - Мобильный (что означает сенсорные события).

выберите события для эмуляции в раскрывающемся списке типов устройств

Обратите внимание, что при выборе других предустановленных устройств тип устройства будет установлен на "Мобильный" и не может быть изменен. Вы также можете выбрать, какой тип устройства вы хотите эмулировать при создании пользовательского устройства в настройках.

выберите тип устройства при добавлении пользовательских устройств

Один важный момент, который я заметил - проверка "Эмулировать сенсорные события" не отключает события мыши, а только добавляет сенсорные.

Единственное, что работает для меня, - это переключать эмуляцию сенсорных событий, найденных в разделе "Эмуляция"> "Датчики в Chrome 45", при каждой перезагрузке страницы. Это довольно дурацкое решение. Надеюсь, кто-то найдет менее раздражающее решение.

Можете ли вы поделиться кодом, который вы пробовали? Вот пример кода, который работал со мной, как на iPhone, так и на Chrome 19

<head>
 <script>
function listen(elem, evnt, func) {
  if (elem.addEventListener)  // W3C DOM5.        
    elem.addEventListener(evnt,func,false);
  else if (elem.attachEvent) { // IE DOM7.         
    var r = elem.attachEvent("on"+evnt, func);
    return r;
  }
}

function attachListeners() {
var touch_div = document.getElementById('touch_me');
listen(touch_div,'touchmove', function(event) {
    touch_div.innerHTML="being touched " + event.targetTouches.length;
    touch_div.style.background =green;
}, false);
listen(touch_div,'touchstart', function(event) {
    event.preventDefault();
    touch_div.innerHTML="touchstart";
    touch_div.style.background ='green';
}, false);
listen(touch_div,'touchend', function(event) {
    touch_div.innerHTML="thanks!";
    touch_div.style.background ='#CCFF66';
}, false);
listen(touch_div,'click', function(event) {
    touch_div.innerHTML="hey - touch, not click!";
    touch_div.style.background ='red';
}, false);
listen(touch_div,'onmouseup', function(event) {
    touch_div.innerHTML="hey - that was a click!";
    touch_div.style.background ='';
}, false);
 }

function run_onload() {
attachListeners();
}   

 </script>

 </head>
 <body onload="run_onload()">
 <div id="touch_me">Touch me!</div>
 </body>
Другие вопросы по тегам