You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:报错Cannot read properties of null (reading 'drawProjectile')的解决方法

错误原因分析
  • 上下文获取逻辑错误:获取Canvas 2D上下文的方式完全不对,代码里用document.getElementById("2d")查找id为"2d"的元素,但这根本不是获取Canvas上下文的正确流程——正确做法是通过Canvas元素调用getContext("2d")方法。
  • 方法名称错误:Canvas 2D上下文不存在drawProjectile这个方法,用于绘制图像的标准方法是drawImage。
  • 大小写不匹配:JavaScript是大小写敏感语言,代码中定义的变量是theContext,但错误行写成了TheContext,首字母大写会导致找不到该变量。
解决办法

修正上下文获取方式、替换错误方法名、统一变量大小写,同时补充必要的画布元素和清除逻辑,修正后的完整代码如下:

<img id="frog" src="frog.png" width="50" height="50">
<!-- 补充缺失的canvas元素 -->
<canvas id="theCanvas" width="600" height="100"></canvas>
<script>
  var theCanvas = document.getElementById("theCanvas");
  // 正确获取Canvas 2D上下文
  var theContext = theCanvas.getContext("2d");
  var theImage = document.getElementById("frog");
  var x = 300;
  var y = 50;
  moveProjectile();

  function drawProjectile() {
    // 绘制前清除画布,避免图像残留轨迹
    theContext.clearRect(0, 0, theCanvas.width, theCanvas.height);
    // 使用标准的drawImage方法,传入x、y控制图像位置
    theContext.drawImage(theImage, x, y);
  }
  function moveProjectile() {
    x += 1;
    drawProjectile();
    window.setTimeout(moveProjectile, 1000/30);
  }
</script>

补充说明:

  • 原代码缺失<canvas>元素,因此补充了id为theCanvas的画布标签并指定宽高;
  • 每次绘制前调用clearRect清除画布,保证移动的图像不会留下重叠轨迹;
  • 利用定义好的x、y变量控制图像位置,实现预期的移动效果。

内容的提问来源于stack exchange,提问作者Coolbro83

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:17:14