javascript - 为什么这个圆没有围绕正确的中心旋转?

标签 javascript animation geometry trigonometry

Jsfiddle:http://jsfiddle.net/yJJs7/

Javascript:

function main(){
    var centerx=250;
    var centery=250;
    var degrees=0;
    var div=document.getElementById('test');
    var move=function(){    
        if(degrees>360)degrees=degrees%360;
        var radians = degrees*Math.PI/180;
        var newx = Math.cos(radians)*100;
        var newy = Math.sin(radians)*100;
        div.style.top=(newy+centery)+'px';
        div.style.left=(newx+centerx)+'px';
        degrees+=10;   
    };
    setInterval(move,50);
    console.log(div);
}
main();

HTML:

<div id="test"></div>
<div id="test2"></div>

CSS:

#test{
    height:100px;
    width:100px;
    background:black;
    border-radius:100px;
    position:fixed;
}
#test2{
    position:fixed;
    height:30px;
    width:30px;
    background:black;
    border-radius:30px;
    position:fixed;
    top:250px;
    left:250px;
}

第二个 div 以 250x250 像素为中心,第一个 div 应围绕它旋转。为什么不是呢?

最佳答案

你的等式正在计算圆心的新位置,但是 style.top/style.left 从圆的顶部/最左边的点出发,你需要减去半径:

div.style.top=(ny+cy-35)+'px';
div.style.left=(nx+cx-35)+'px';

http://jsfiddle.net/yJJs7/1/


虽然这将围绕小圆 (265, 265) 的中心旋转而不是 (250, 250),因此您可能想要在 css 中偏移小圆:

#test2{
    ...
    top:235px;
    left:235px;
}

div.style.top=(ny+cy-50)+'px';
div.style.left=(nx+cx-50)+'px';

http://jsfiddle.net/yJJs7/7/

关于javascript - 为什么这个圆没有围绕正确的中心旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542051/

相关文章:

javascript - 将段落或新元素转换为复选框

c++ - C++判断3条边是否构成三角形

javascript - 如何隐藏粒子效果(圆圈)直到加载其动画的 .png?

java - 以最有效的方式在不同时间绘制多个对象

C++ & DirectX - 几何问题

c# - 两个圆的切线

javascript - 如何使用querySelector选择动态添加的元素

javascript - 操作 dom 元素而不修改实际 dom 状态

javascript - 如何在 bing map 中绘制路径或线两个图钉?

iphone - 有没有办法在 UIImage 中制作超越图像堆栈的动画?