Javascript 从屏幕上的任意位置滚动iPhone上的div

Javascript 从屏幕上的任意位置滚动iPhone上的div,javascript,iphone,html,ipad,touch-event,Javascript,Iphone,Html,Ipad,Touch Event,我想在iPhone上防止页面上的默认滚动动作,只有一个div例外。基本上,当有人用手指在屏幕上的任何地方滑动时,这个div应该移动。当有人直接触摸div元素时,我使用的代码可以正常工作,但在其他方面,div的位置非常不稳定。我在哪里搞砸了?这是一个松散的修改,我发现在 试验 var startY=document.getElementById(“testdiv”).offsetTop; var curY=恒星; 多愁善感; document.addEventListener('touchsta

我想在iPhone上防止页面上的默认滚动动作,只有一个div例外。基本上,当有人用手指在屏幕上的任何地方滑动时,这个div应该移动。当有人直接触摸div元素时,我使用的代码可以正常工作,但在其他方面,div的位置非常不稳定。我在哪里搞砸了?这是一个松散的修改,我发现在


试验
var startY=document.getElementById(“testdiv”).offsetTop;
var curY=恒星;
多愁善感;
document.addEventListener('touchstart',函数(事件){
touchY=event.targetTouches[0].pageY;
},假);
document.addEventListener('touchmove',函数(事件){
event.preventDefault();
curY=event.targetTouches[0]。pageY-startY-touchY;
document.getElementById(“testdiv”).style.webkittTransform='translate(0px,+curY+'px)';
},假);
document.addEventListener('touchend',函数(事件){
startY=curY;
},假);

更改
curY
的值时,将
-startY
更改为
+startY
。问题不在于它只在触摸div时起作用。
…pageY-touchY
的值将是自首次记录以来触摸移动的距离。如果上一个偏移为50像素,并向下移动了20像素,则希望新偏移为20+50,而不是20− 50您在第一次触摸时没有注意到问题,因为
startY
的初始值接近0。实际上,
startY
的初始值应该是0,而不是div的
offsetTop
,因为转换将相对于起始偏移应用。

谢谢,fhqwhgads。如果可以的话,我会给你上百次票。
<div id="testdiv">
   test test test test
</div>
<script type="text/javascript">
        var startY = document.getElementById("testdiv").offsetTop;
        var curY = startY;
        var touchY;

        document.addEventListener('touchstart', function(event) {
            touchY = event.targetTouches[0].pageY;
        }, false);

        document.addEventListener('touchmove',function(event) {
            event.preventDefault();
            curY = event.targetTouches[0].pageY - startY - touchY;
            document.getElementById("testdiv").style.webkitTransform = 'translate(0px,' + curY + 'px)';
        }, false);

        document.addEventListener('touchend',function(event) {
            startY = curY;
        }, false);
</script>