我想用JS操纵用户行进的距离。以下适用于移动模式下的chrome,但当我切换到iOS时,没有任何作用。我做了一些挖掘,发现在移动设备上有一些关于setTimeout()的特殊内容,尽管给定的解决方案不起作用。如果我删除了setTimeout(),那么一切都可以在iOS上运行,但它的启动速度太快,无法注册良好的移动。
window.addEventListener('load', function(){
var box1 = document.getElementById('box1');
var statusdiv = document.getElementById('statusdiv');
var startx = 0;
var starty = 0;
var dist = 0;
box1.addEventListener('touchstart', function(e){ e.preventDefault(); });
box1.addEventListener('touchmove', function(e){
var touchobj = e.changedTouches[0];
startx = parseInt(touchobj.clientX);
starty = parseInt(touchobj.clientY);
setTimeout(function(){
var dist = Math.sqrt(Math.pow(parseInt(touchobj.clientX) - startx,2) + Math.pow(parseInt(touchobj.clientY) - starty,2));
var angleDeg = 180 - Math.atan2((parseInt(touchobj.clientY) - starty) , (parseInt(touchobj.clientX) - startx)) * (180 / Math.PI);
statusdiv.innerHTML = 'Status: touchmove<br> Horizontal distance traveled: ' + dist + 'px';
} , 50);
e.preventDefault();
}, false)
}, false)
答案 0 :(得分:0)
我没有尽可能多地清理它,但它确实有效。我把它换了,所以它在一段时间内工作。
window.addEventListener('load', function(){
function calc(){
var dist = Math.sqrt(Math.pow(parseInt(touchobj.clientX) - startx,2) + Math.pow(parseInt(touchobj.clientY) - starty,2));
var angleDeg = 180 - Math.atan2((parseInt(touchobj.clientY) - starty) , (parseInt(touchobj.clientX) - startx)) * (180 / Math.PI);
statusdiv.innerHTML = 'Status: touchmove<br> Horizontal distance traveled: ' + dist + 'px';
startx = parseInt(touchobj.clientX);
starty = parseInt(touchobj.clientY);
}
var box1 = document.getElementById('box1');
var statusdiv = document.getElementById('statusdiv');
var startx = 0;
var starty = 0;
var dist = 0;
var intThing;
var touchobj;
box1.addEventListener('touchstart', function(e){
intThing = setInterval(calc, 50);
e.preventDefault();
});
box1.addEventListener('touchmove', function(e){
touchobj = e.changedTouches[0];
e.preventDefault();
}, false)
box1.addEventListener('touchend', function(e){
clearInterval(intThing);
e.preventDefault();
});
}, false)