美文网首页Web前端之路程序员
js 根据鼠标拖动(或手机长按)旋转

js 根据鼠标拖动(或手机长按)旋转

作者: 猫爪 | 来源:发表于2018-06-28 15:38 被阅读70次
    因为没有搜索到,所以 自己写了一个

    废话不多说,直接上效果图


    旋转效果.gif

    废话不多说,直接上代码,顺便给个数学的公式图

    .png

    将公式变化为js代码

                //得到 向量1
                var x1 = (beginPointX - bgCenterX);
                var y1 = (beginPointY - bgCenterY);
    
                //得到 向量2
                var x2 = (event.center.x - bgCenterX);
                var y2 = (event.center.y - bgCenterY);
    
                //计算cos =(x1x2+y1y2)/[√(x1²+y1²)*√(x2²+y2²)]
                var cos =( x1 * x2 + y1 * y2) /( Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)) * Math.sqrt(Math.pow(x2, 2) + Math.pow(y2, 2)) );
    
                // 弧度
                var radina = Math.acos(cos);
                // 角度
                var angle =  180 / (Math.PI / radina);
    
    

    控件的需求是根据鼠标拖来旋转,所以用到了Vue-touch 控件的 pan 事件,然后控件的大小固定宽高300px, 完整的控制代码

      panmove:function(event){
                //得到 向量1
                var x1 = (beginPointX - bgCenterX);
                var y1 = (beginPointY - bgCenterY);
    
                //得到 向量2
                var x2 = (event.center.x - bgCenterX);
                var y2 = (event.center.y - bgCenterY);
    
                //计算cos =(x1x2+y1y2)/[√(x1²+y1²)*√(x2²+y2²)]
                var cos =( x1 * x2 + y1 * y2) /( Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)) * Math.sqrt(Math.pow(x2, 2) + Math.pow(y2, 2)) );
                
                var radina = Math.acos(cos);
                console.log(radina);
    
                // 角度
                var angle =  180 / (Math.PI / radina);
    
                //如果在中线左边 就需要加 180度
                if(event.center.x <150){
                    angle = 180 + (180 - angle);
                }
                this.styleObject.transform =  'rotate(' + angle + 'deg)';            
            },
    

    相关文章

      网友评论

      本文标题:js 根据鼠标拖动(或手机长按)旋转

      本文链接:https://www.haomeiwen.com/subject/qtugyftx.html