Javascript iOS webkit上GestureEvent.rotation的奇怪行为

Javascript iOS webkit上GestureEvent.rotation的奇怪行为,javascript,ios,html,touch,mobile-website,Javascript,Ios,Html,Touch,Mobile Website,我使用javascript手势事件来检测应用于HTML文档中元素的多点触控平移/缩放/旋转 使用iPad访问此URL: 您可以用两个手指触摸元素并旋转它,但有时旋转属性会出错,我的元素会围绕许多完整旋转翻转 这是我代码的一部分,我实际上只是直接从事件对象获取值: ...bind("gesturechange",function(e){ e.preventDefault(); curX = e.originalEvent.pageX - s

我使用javascript手势事件来检测应用于HTML文档中元素的多点触控平移/缩放/旋转

使用iPad访问此URL:

您可以用两个手指触摸元素并旋转它,但有时旋转属性会出错,我的元素会围绕许多完整旋转翻转

这是我代码的一部分,我实际上只是直接从事件对象获取值:

...bind("gesturechange",function(e){        
       e.preventDefault();      
       curX = e.originalEvent.pageX - startX;
       curY = e.originalEvent.pageY - startY;
       node.style.webkitTransform = "rotate(" + (e.originalEvent.rotation) + "deg)" +
                     " scale(" + e.originalEvent.scale + ") translate3D(" + curX + "px, " + curY + "px, 0px)";              
}...
结果是该值要么360度增加,要么360度减少,因此我可以监控该值并对突然的大变化作出反应,但这感觉像是最后的手段

我是不是遗漏了一些显而易见的东西?

我找到了解决办法

为了避免旋转中的突然变化不反映真实的手指移动,您需要对此进行测试。我做这个测试,如果旋转在任何一个方向上改变了300度以上,如果它改变了,那么你需要根据方向增加或减少360度。不是很直观,但它是有效的

固定页面如下:

这是密码

    <script type="text/javascript">
        var node;
        var node_rotation=0;
        var node_last_rotation=0;

        $('.frame').bind("gesturestart",function(e){    
            e.preventDefault();
            node=e.currentTarget;       
            startX=e.originalEvent.pageX;
            startY=e.originalEvent.pageY;
            node_rotation=e.originalEvent.rotation;
            node_last_rotation=node_rotation;

        }).bind("gesturechange",function(e){
            e.preventDefault(); 
            //whats the difference to the last given rotation?
            var diff=(e.originalEvent.rotation-node_last_rotation)%360;
            //test for the outliers and correct if needed
            if( diff<-300)
            {
                diff+=360;
            }
            else if(diff>300)
            {
                diff-=360;
            }   
            node_rotation+=diff;
            node_last_rotation=e.originalEvent.rotation;     

            node.style.webkitTransform = "rotate(" + (node_rotation) + "deg)" +
                " scale(" + (e.originalEvent.scale) + 
                ") translate3D(" + (e.originalEvent.pageX - startX) + "px, " + (e.originalEvent.pageY - startY) + "px, 0px)";   

        }).bind("gestureend",function(e){
            e.preventDefault();                  
        });
    </script>