未捕获的类型错误:无法读取 null 的属性“getContext”

Posted

技术标签:

【中文标题】未捕获的类型错误:无法读取 null 的属性“getContext”【英文标题】:Uncaught TypeError: Cannot read property 'getContext' of null 【发布时间】:2014-11-07 19:43:00 【问题描述】:

在我的控制台中,我收到错误:“未捕获的 TypeError:无法读取属性 'getContext' of null” 我就是找不到我犯的错误……或者我做错了什么。 所以也许你可以帮我找到它? 请帮忙:)

enter code here

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

var cW = canvas.width = 1000; 
var cH = canvas.height = 500; 

var particleAmount = 10; 
var particles = []; 

for(var i=0;i<particleAmount;i++)  
particles.push(new particle());



function particle()  
this.x = (Math.random() * (cW-(40*2))) + 40; 
this.y = (Math.random() * (cH-(40*2))) + 40; 
this.xv = Math.random()*20-10; 
this.yv = Math.random()*20-10; 



function draw ()  
ctx.fillStyle = "black";
ctx.fillRect(0,0,cW,cH);

for(var ii=0;ii<particles.length;ii++)
    var p = particles[ii]; 
    ctx.fillStyle = "red";
    ctx.beginPath(); 
    ctx.arc(p.x,p.y,40,Math.PI*2,false); 
    ctx.fill();





setInterval(draw,30);

【问题讨论】:

您确定要在 DOM 准备就绪时加载脚本吗? 这是我的 html 代码: Vector_5 html> 对,所以画布还不存在。在画布元素之后加载脚本。 谢谢!! :D 现在可以正常使用了! 【参考方案1】:

该错误基本上意味着 HTML 和 javascript 代码不能正常协作,或者只是您没有正确加载脚本。 试试这个:

function init() 
  // Run your javascript code here


// Run the 'init' function when the DOM content is loaded
document.addEventListener("DOMContentLoaded", init, false);

希望这会有所帮助。

【讨论】:

【参考方案2】:

答案就在问题后面的 cmets 中!其他人也在下面发布了它作为答案,但所有学分都归于:@elclanrs

“对,所以画布还不存在。在画布元素之后加载脚本。– elclanrs 2014 年 9 月 13 日 22:43”

【讨论】:

【参考方案3】:

我想你把脚本标签放在画布标签上面请把它放在画布标签后面。

【讨论】:

【参考方案4】:

将脚本文件放在画布之后。这意味着把你的脚本放在body标签之前。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML5 Canvas</title>

    <link rel="shortcut icon" href="assets/1.png">
    <link rel="stylesheet" href="assets/canvas.css">
</head>
<body>
    <div class="container">
        <h2>Canvas</h2>
        <canvas id="myCanvas"  >

        </canvas> <!-- End Canvas -->
    </div> <!-- End Container -->
    <script src="canvas.js"></script>
</body>
</html> 

【讨论】:

【参考方案5】:

尝试在脚本标签之前声明画布元素。对我来说效果很好。

【讨论】:

以上是关于未捕获的类型错误:无法读取 null 的属性“getContext”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取 null 的属性“getContext”

为啥我会收到此错误:未捕获的类型错误:无法读取 null 的属性 'classList'

未捕获的类型错误:在输入单击时无法读取 null 的属性“样式”

如何修复未捕获的类型错误:无法读取 null 的属性“值”

未捕获的类型错误:无法读取 null 的属性“innerHTML”

未捕获的类型错误:无法在方法中读取 null 的属性“classList”