当我尝试在javascript中加载getContext函数时,我必须使用window.load函数在运行我的javascipt代码之前首先加载DOM对象。所以我的问题是,是否有任何其他方式来运行getContext函数,而不必将我的所有代码都放在一个函数中,而不使用其他类型的库。这是我的代码。
function init() {
var cvs = document.getElementById("myCanvas");
var ctx = cvs.getContext("2d");
ctx.rect(20,20,150,100);
ctx.stroke();
}
window.onload = init;
答案 0 :(得分:0)
您也可以将脚本放在HTML的底部。
this

您还可以确保脚本位于单独的文件中并使用<div id="someid"></div>
<script>
console.log(document.querySelector('#someid'));
</script>
:
defer
<head>
<script src="myscript.js" defer></script>
</head>
<body>
<div id="someid"></div>
只会在加载文档后自动运行脚本,所以我认为它是最好的方法。此外,由于脚本是关于如何与内容交互而不是内容本身的信息,我认为它们在语义上属于标题而不是在主体的末尾。 (虽然你可以将一个脚本放在正文的末尾,以确保在脚本运行之前填充正文,但我不认为这是一种非常干净的做事方式)
答案 1 :(得分:0)
你需要确保你的DOM在使用canvas标签填充之后运行,否则当JS正在寻找它时它就不会存在。
这样做的一种方法就是你已经做过的。这可能是最好的方式。但我会这样写:
window.addEventListener("load", init);
这没有任何问题,你应该养成将所有代码都放在函数中的习惯。但还有其他选择。
您可以将defer
属性放在script
标记中。这将使它在DOM加载后运行。
或者您可以将script
标记放在canvas标记之后的某个位置。 script
标记在HTML中出现的位置决定了它的执行时间。所以你可以把它放在body
的末尾。