更新未定义?

时间:2011-10-24 15:46:26

标签: javascript html html5-canvas

我正在尝试在画布上创建一个移动对象,但每次设置间隔都会消失时,它会给出错误:“未定义更新”,即使更新的定义在init之前就已存在。如何设置间隔以正确调用更新?

<!doctype html>  
<html lang="en">  
    <head>  
          <meta charset="utf-8">  
          <title>Test</title>  
          <meta name="description" content="An HTML5 Test">  
          <meta name="author" content="William Starkovich">  
          <link rel="stylesheet" href="css/styles.css?v=1.0">
          <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){

                var angle = 0.0;
                var increment = 0.1;

                function incrementAngle(angle, increment){
                    angle += increment;

                    if(angle > Math.PI * 2)
                        angle -= (Math.PI * 2);
                }

                function update(angle, increment){
                    incrementAngle(angle, increment);

                    //get a reference to the canvas
                    var ctx = $('#canvas')[0].getContext("2d");
                    //draw a circle
                    ctx.strokeStyle = "#000000";
                    ctx.beginPath();
                    ctx.arc(20, 20, 15, angle, angle + Math.PI, true);
                    ctx.lineWidth = 5;
                    ctx.stroke();
                    ctx.closePath();
                }

                function init(angle, increment){  
                  update(angle, increment) 
                  setInterval("update(angle, increment)",1000);  
                } 

                init(angle, increment);

            });
          </script>    
    </head>  
    <body>  
         <canvas id="canvas" width="800px" height="100px">
        <p>Your browser doesn't support canvas.</p>
        </canvas>
    </body>  
</html> 

2 个答案:

答案 0 :(得分:2)

您似乎正在寻求使用全局变量,为什么不一直走?

http://jsfiddle.net/mblase75/8L62c/3/

var angle = 0.0;
var increment = 0.1;

function incrementAngle() {
    angle += increment;
    if (angle > Math.PI * 2) angle -= (Math.PI * 2);
}

function update() {
    incrementAngle();

    //get a reference to the canvas
    var ctx = $('#canvas')[0].getContext("2d");
    //draw a circle
    ctx.strokeStyle = "#000000";
    ctx.beginPath();
    ctx.arc(20, 20, 15, angle, angle + Math.PI, true);
    ctx.lineWidth = 5;
    ctx.stroke();
    ctx.closePath();
}

function init() {
    update();
    setInterval(update, 1000);
}

$(document).ready(function() {
    init();
});

答案 1 :(得分:1)

不要在eval中使用字符串,因为它们是在全局范围内执行的,而您的函数是在document.ready处理程序中定义的。如果要提供参数,请使用匿名函数:

setInterval(function() { update(angle, increment); } ,1000);