我想根据收到的角度旋转指南针图像。输入度在0到359之间,所以当我从0旋转-1度时,图像旋转一整圈并设置为359:
function setCompass(degrees){
$("#compass").stop().transition({rotate: -1*degrees +'deg'});
}
我试图通过返回-1(而不是359)来解决该问题,因此将代码更改为以下内容:
function setCompass(degrees){
if (degrees>180){degrees=degrees-360}
$("#compass").stop().transition({rotate: -1*degrees +'deg'});
}
它解决了0和360的滞后问题,但问题转移到180。现在,当我将设备从180旋转到181时,它旋转了一个完整的负回合,返回到-179!请建议我如何修改计算,以便每个度数都能平稳变化?
最佳答案
您可以使用一些取模公式来确定是顺时针还是逆时针旋转。使用jQuery的data
方法保持当前角度(因此,如果您愿意,可以拥有多个这样的指南针),并允许以CSS值传递的角度在0-359范围之外。
运作方式如下:
function setCompass(degrees){
var curr = $("#compass").data("rotation") || 0;
var next = curr + ((degrees - curr)%360 + 180*3) % 360 - 180;
$("#compass").data("rotation", next).stop().transition({rotate: -next + 'deg'});
}
// Demo with randomly generated angles between 0 and 359
setInterval(function() {
setCompass(Math.floor(Math.random()*360));
}, 1000);
<img id="compass" src="https://i.stack.imgur.com/zdHVn.png" width="100px" height="100px">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.transit/0.9.12/jquery.transit.min.js"></script>