因為沒有搜索到,所以 自己寫了一個
廢話不多說,直接上效果圖

旋轉效果.gif
廢話不多說,直接上代碼,順便給個數(shù)學的公式圖

.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)/[√(x12+y12)*√(x22+y22)]
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);
控件的需求是根據(jù)鼠標拖來旋轉,所以用到了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)/[√(x12+y12)*√(x22+y22)]
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)';
},