Google chrome 铬“;“模拟触摸事件”;不起作用

Google chrome 铬“;“模拟触摸事件”;不起作用,google-chrome,mobile,touch,google-chrome-devtools,touch-event,Google Chrome,Mobile,Touch,Google Chrome Devtools,Touch Event,我已经在Chrome的开发者工具中启用了“模拟触摸事件”选项。我设置了一个简单的测试程序,当我触摸时会发出警报。该程序在我的Galaxy Nexus上运行良好,但当我在Chrome中单击时,即使启用了“模拟触摸事件”选项,也不会发生任何事情。有什么建议吗?我是否正确使用此工具 这是我的代码-没什么特别的 <!DOCTYPE html> <html lang="en"> <head> <style type="text/css">

我已经在Chrome的开发者工具中启用了“模拟触摸事件”选项。我设置了一个简单的测试程序,当我触摸
时会发出警报。该程序在我的Galaxy Nexus上运行良好,但当我在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>

#主分区
{
位置:绝对位置;
宽度:50px;
高度:20px;
背景色:红色;
最高:50%;
左:20px;
}           
函数init()
{
main_div=document.getElementById(“main_div”);
main_div.ontouchstart=函数()
{                    
警报(“此处”);
}                               
}
你好

你好
您能分享您尝试过的代码吗? 这是一个在iPhone和Chrome19上都可以使用的示例代码

<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>

函数侦听(elem、evnt、func){
if(elem.addEventListener)//W3C DOM5。
元素addEventListener(evnt、func、false);
else如果(elem.attachEvent){//IE DOM7。
var r=元件附件(“on”+evnt,func);
返回r;
}
}
函数attachListeners(){
var touch_div=document.getElementById('touch_me');
聆听(触摸分区,'touchmove',功能(事件){
touch_div.innerHTML=“被触摸”+event.targetTouches.length;
touch_div.style.background=绿色;
},假);
监听(触控分区,'touchstart',功能(事件){
event.preventDefault();
touch_div.innerHTML=“touchstart”;
触摸div.style.background='green';
},假);
监听(触摸分区,'touchend',功能(事件){
touch_div.innerHTML=“谢谢!”;
touch_div.style.background='#CCFF66';
},假);
监听(触摸、点击、功能(事件){
touch_div.innerHTML=“嘿-触摸,不要点击!”;
触摸div.style.background='red';
},假);
监听(触摸分区,'onmouseup',功能(事件){
touch_div.innerHTML=“嘿,那是一个点击!”;
touch_div.style.background='';
},假);
}
函数run_onload(){
附件侦听器();
}   
碰我!

触摸事件在Chrome版本21中工作(不确定以前的版本),但您必须保持“开发人员工具”窗口打开,才能发生触摸事件。如果关闭窗口,您将返回正常的鼠标事件。

我注意到的一个重要问题是,选中“模拟触摸事件”并不会禁用鼠标事件,它只会添加一个触摸。

让我感到困惑的是,除了选中“模拟触摸事件”复选框外,还必须启用主控按钮选中复选框以启用覆盖。一旦两者都被检查过,它就可以正常工作了


对我来说唯一有效的方法就是每次重新加载页面时,切换Chrome 45中的仿真>传感器中的仿真触摸事件。这是一个相当糟糕的解决方案。希望有人能找到一个不那么烦人的解决办法


从Chrome 69开始,设置中没有覆盖窗格,控制台中也没有模拟器抽屉。相反,您可以单击设备视图中的
图标,然后选择“添加设备类型”

在响应模式下,这将显示一个带有选项“移动”、“移动(无触摸)”、“桌面”和“桌面(无触摸)”的小下拉列表。如果看不到,请展开“设备视图”窗格的宽度。响应模式的默认设置为移动(这意味着触摸事件)

请注意,当您选择其他预设设备时,设备类型将设置为“移动”,并且无法更改。在“设置”中创建自定义设备时,还可以选择要模拟的设备类型


我正在运行19.0.1084.56版。您是否碰巧放大/缩小了页面?Chrome中的事件坐标(包括鼠标坐标和触摸坐标)根据缩放和页面布局的不同而不同。因此,您可能只是在垂直方向上“丢失”了目标div。我检查了缩放级别-我处于标准缩放状态。我还疯狂地点击了我的目标周围,希望Chrome只是错误地读取了我的坐标,但是,唉,没有用。感谢您的建议。由于某些原因,DOM0事件不适用于触摸模拟。您可以使用DOM2
addEventListener(“ontouchstart”,…)
作为解决方法。同时,已经存档。谢谢你的评论,但即使在这个例子中,Chrome也将我的点击理解为实际的鼠标点击,而不是触摸。来源?你自己也经历过这种情况吗?“这个功能和其他许多覆盖一样,只有在DevTools打开时才能工作。”来源:你知道一种在模拟触摸事件时禁用鼠标事件的方法吗。我认为在Chrome中没有简单的方法可以做到这一点——只捕获它们并运行preventBubble、StopperPagation、,停止对事件的即时发布。。。尽管我不是很肯定,但我还是会首先抓住所有这些,因为这就是触摸事件的工作原理。它们在单击事件的顶部添加额外的层。启用触摸时禁用单击事件意味着与实际设备上的工作方式相比,仿真层将被破坏。此启用复选框必须是全新的。我以前用过这个,但没见过。我想它是在Chrome30上出现的。我在下面的回答中找到了一个更新的解决方案。