因为没有搜索到
,所以 自己写了一个
废话不多说,直接上效果图
旋转效果.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)'; },
作者:猫爪
链接:https://www.jianshu.com/p/2b1d0b5fae88