gpt4 book ai didi

javascript - 变量在函数内部不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:02 24 4
gpt4 key购买 nike

为什么这不起作用?

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');


var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0);
};
img.src = 'hero.png';

但是这样可以吗?

var img = new Image();
img.onload = function(){
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.drawImage(img,0,0);
};
img.src = 'hero.png';

如何使 ctx 变量 成为全局变量以便我可以在所有函数中使用?顺便说一句,在所有教程中,每个人都使用第一种方法...

成功了!

最佳答案

我怀疑原因是时机:如果您的代码在 script上方 元素,其中您的元素带有 id "canvas"已定义,您的第一个代码块将不会在 document.getElementById("canvas") 中找到它打电话,因为它还不存在。通过等待图像加载,您可以稍后检查它是否存在。

如果我是对的,解决方案是移动 script阻止到你的 body 的末尾元素,就在你结束之前 </body>标签(或 anywhere after canvas 标签,真的)。

例如,代替:

<!-- ... -->
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');


var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0);
};
img.src = 'hero.png';
</script>
<!-- ... -->
<canvas id="canvas"></canvas>
<!-- ... -->
</body>

这样做:

<!-- ... -->
<canvas id="canvas"></canvas>
<!-- ... -->
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');


var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0);
};
img.src = 'hero.png';
</script>
</body>

将脚本放在文件底部是个好主意无论如何,更多:YUI Best Practices for Speeding Up your Website

关于javascript - 变量在函数内部不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com