TypeError:无法调用null的方法'getContext'(匿名函数)

Fie*_*wer 6 javascript canvas typeerror

我是初学者,之前没有真正做过任何JavaScript,所以我希望你能帮助我.我制作了一个画布,让用户可以选择带有单选按钮的形状和颜色,然后将其绘制到画布上.我还添加了一个复选框,其中包含为所选颜色添加渐变的选项.这是该计划:http: //people.dsv.su.se/~caak1743/Canvas/canvas.html

现在我不想这样做,以便可以在画布区域周围拖放形状.我发现一个代码,我认为可以更改为我的程序,但我一直得到:TypeError:无法为该行调用null init(匿名函数)的方法'getContext':

     var ctx = canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题或者我怎么解决它.我试过寻找类似问题的类似程序,但没有找到我可以在这里申请的任何东西.这是我试图与我合并的代码:

    function init() {
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    return setInterval(draw, 10);
    }

    function draw() {
    clear();
    ctx.fillStyle = "#FAF7F8";
    rectangle(0,0,WIDTH,HEIGHT);
    ctx.fillStyle = "#444444";
    rectangle();
    }

    function myMove(e){
    if (dragok){
    x = e.pageX - canvas.offsetLeft;
    y = e.pageY - canvas.offsetTop;
    }
    }

    function myDown(e){
    if (e.pageX < x + 15 + canvas.offsetLeft && e.pageX > x - 15 +
    canvas.offsetLeft && e.pageY < y + 15 + canvas.offsetTop &&
    e.pageY > y -15 + canvas.offsetTop){
    x = e.pageX - canvas.offsetLeft;
    y = e.pageY - canvas.offsetTop;
    dragok = true;
    canvas.onmousemove = myMove;
    }
    }

    function myUp(){
    dragok = false;
    canvas.onmousemove = null;
    }

    init();
    canvas.onmousedown = myDown;
    canvas.onmouseup = myUp;
Run Code Online (Sandbox Code Playgroud)

小智 17

只需更正以下内容:

<script type="text/javascript">
window.onLoad=function(){ init();};
  function init() {
    var canvas = document.getElementById("myCanvas");
    var ctx = canvas.getContext("2d");
    return setInterval(draw, 10);
  }

  function draw() {
    clear();
    ctx.fillStyle = "#FAF7F8";
    rectangle(0,0,WIDTH,HEIGHT);
    ctx.fillStyle = "#444444";
    rectangle();
  }

  function myMove(e) {
    if (dragok) {
      x = e.pageX - canvas.offsetLeft;
      y = e.pageY - canvas.offsetTop;
    }
  }

  function myDown(e) {
    if (e.pageX < x + 15 + canvas.offsetLeft && e.pageX > x - 15 +
        canvas.offsetLeft && e.pageY < y + 15 + canvas.offsetTop &&
        e.pageY > y -15 + canvas.offsetTop) {
      x = e.pageX - canvas.offsetLeft;
      y = e.pageY - canvas.offsetTop;
      dragok = true;
      canvas.onmousemove = myMove;
    }
  }

  function myUp() {
    dragok = false;
    canvas.onmousemove = null;
  }

  init();
  canvas.onmousedown = myDown;
  canvas.onmouseup = myUp;
</script>
Run Code Online (Sandbox Code Playgroud)

这应该工作.问题是canvas元素需要准备好运行脚本.由于<script>in <head>部分在加载之前运行<canvas>它会产生错误.