我注意到当我尝试将某些项目拖动到移动铬中时,touchmove事件在touchstart之后出现了一些差距。 我写了脚本来找出这个像素的差距:
` 盲区
<script type="text/javascript">
window.addEventListener('load', function() {
var box = document.getElementById("box");
var status = document.getElementById("status");
var startPoint = 0;
var moveStart = false;
box.addEventListener('touchstart', function(e) {
startPoint = parseInt(e.changedTouches[0].clientX);
e.preventDefault();
});
box.addEventListener('touchmove', function(e) {
if(moveStart) return;
moveStart = true;
status.innerHTML = "deadZone: " + (e.changedTouches[0].clientX - startPoint) + "px";
e.preventDefault();
});
box.addEventListener('touchend', function(e) {
e.preventDefault();
moveStart = false;
});
});
</script>
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
`
我的结果是:右/左拖动14-30px,上/下2-10px。看起来盒子在移动它的开始时就被拍到了smthg。 我怎样才能避免这种情况并从真正的起点开始跟踪touchmove?
答案 0 :(得分:0)
这是Chrome for Android(M31 - 当前版本)中的一个错误。幸运的是,它很快就会修复,应该在M33或M34:https://code.google.com/p/chromium/issues/detail?id=323677
基本摘要是Android会抑制'slop'事件,以便您最后一次阻止滚动的机会总是第一次触摸移动。