用的原理是 x*x+y*y=r*r
<div id=a style="background:red;width:100px;height:100px"></div>
        <script>
var a=document.getElementById("a")
var b=function(element,x){
element.style.left=x;
element.style.top=Math.sqrt(1600 - x * x)
}
for(var i=100;i<500;i+=10){
var ss=setInterval('b(a,i)',10);
if(i==450)clearInterval(ss)
}
        </script>

解决方案 »

  1.   

    div        position:absoluteMath.sqrt(1600 - x * x)???????这是什么
    1600横大于x*x?????  (0<x<450)
    负数可以开平方根????  
      

  2.   

     element.style.left=x;
                element.style.top=Math.sqrt(1600 - x * x)这个关系应该不对,不是圆形轨迹
      

  3.   

    100的平方是10000,已经大于1600了<div id="a" style="position:absolute;background:red;width:100px;height:100px"></div>
            <script >
            var i, ss;
            i = 100;
            var b=function(element){
                element.style.left = i;
                element.style.top = parseInt(Math.sqrt(202500 - i * i))
             i +=10;
             if(i==450) clearInterval(ss);
            }
    window.onload=function(){
      var a=document.getElementById("a")
      ss=setInterval((function(obj){
          return function(){b(obj);}
      })(a),100);
    }
            </script>
      

  4.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function animateCss(element, numFrames, timePerFrame, animation, whendone){
        var frame = 0;
        var time = 0;
        var intervalId = setInterval(displayNextFrame, timePerFrame);
        function displayNextFrame(){
            if(frame >= numFrames){
                clearInterval(intervalId);
                if(whendone){
                    whendone(element);
                }
                return;
            }
            for(var cssprop in animation){
                try{
                    element.style[cssprop] = animation[cssprop](frame, time);
                }catch(e){}    
            }        frame++;
            time+= timePerFrame;
        }
    }
    </script></head><body>
    <div id="title" style="position:absolute;font-weight:bold;font-size:50px;color:red"/>.</div>
    <script type="text/javascript">
    <!--
        animateCss(document.getElementById("title"),100, 50,
            {
                left: function(f,t){ return 200 + 100*Math.cos(f/8) + "px"},
                top: function(f,t){return 200 + 100*Math.sin(f/8) + "px";}
            },
            function (obj){obj.innerHTML = "Finsh"}
        );//-->
    </script>
    </body>
    </html>
      

  5.   

    @4楼 不行啊
    @5楼  虽然可以  但是我想要最简单的版本 
    有没有最简单的 
    例如:把我的例子给的成功执行 就可以  
    谢谢 等高人 
    虽然sin cos也可以实现 但我想知道 为什么x*x+y*y=r*r 在这不行???
      

  6.   

    x*x+y*y=r*r 是什么?有这样公式??
      

  7.   

    看一下这个:<html>
    <head>
    <title>测试javascript画圆</title>
    <script language="javascript">
       var pointx = 150; //圆心x坐标
       var pointy = 150; //圆心y坐标
       var r = 40;       //圆半径
       var b=function(element){
           var x = element.style.left;
           var y = element.style.top;
           x = x.substring(0,3);
           y = y.substring(0,3);
           if(x>150 && y>=150){  //右下半圆
            //alert("右下半圆: x="+x+"  y="+y);
            x = x - 5;
            y = pointy + Math.abs(Math.sqrt(1600 - Math.pow((x - pointx),2)));
            element.style.left = x+"px";
            element.style.top = y+"px";
           }else if(x<=150 && y>150){ //左下半圆
            //alert("左下半圆: x="+x+"  y="+y);
            x = x - 5;
            y = pointy + Math.abs(Math.sqrt(1600 - Math.pow((x - pointx),2)));
            element.style.left = x+"px";
            element.style.top = y+"px";
           }else if(x<150 && y<=150){ //左上半圆
            //alert("左上半圆: x="+x+"  y="+y);
            x = parseInt(x) + 5;
            y = pointy - Math.abs(Math.sqrt(1600 - Math.pow((x - pointx),2)));
            //alert("左上半圆: x="+x+"  y="+y);
            element.style.left = x+"px";
            element.style.top = y+"px";
           }else if(x>=150 && y<150){ //右上半圆
            //alert("右上半圆: x="+x+"  y="+y);
            x = parseInt(x) + 5;
            y = pointy - Math.abs(Math.sqrt(1600 - Math.pow((x - pointx),2)));
            element.style.left = x+"px";
            element.style.top = y+"px";
           }
       }
       function circlestart(){
        var a = document.getElementById("a");
        var ss = setInterval('b(a)',10);
       }
    </script>
    </head>
    <body onload="circlestart()">
    <div id="a" style="background-color:red;left:150px;top:190px;width:10px;height:10px;position:absolute;"></div>
    </body>
    </html>