繁体   English   中英

“ var canvas = document.getElementById(“ canvas”)”不能为全局变量吗?

[英]“var canvas = document.getElementById(”canvas“)” can't be a global variable?

我做了以下脚本。 当我按下按钮时,单词“ blood”会移动,然后按下按钮,它将停止。

该脚本在Chrome中有效,但是当我将以下脚本移至TOP行时。 (在var flag;之间var flag;window.setInterval ),发生错误, window.setInterval

未捕获的typeerror无法调用null的方法“ getcontext”

您能解释一下为什么会发生吗?

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

var y = 100;
var flag = false;

window.onload = setInterval(function(){
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");


ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);

ctx.fillStyle = "red";
ctx.font = "50px Helvetica";
ctx.fillText("blood", 200, y);

if(flag){
y++;
}

}, 30);

function start(){
flag = true;
}

function stop(){
flag = false;
}

如果在html主体末尾的script元素中运行代码,则可以确保在DOM准备就绪之前,它不会尝试获取画布上下文。 另外,我对您的代码进行了优化,以缓存DOM查找:

<html>
<head>
    <title>Canvas Scrolling Text</title>
</head>
<body>
    <canvas id="canvas"></canvas>
    <script type="text/javascript">
        var y = 100;
        var flag = false;

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

        setInterval(function() {
            ctx.fillStyle = "black";
            ctx.fillRect(0, 0, canvas.width, canvas.height);

            ctx.fillStyle = "red";
            ctx.font = "50px Helvetica";
            ctx.fillText("blood", 100, y);

            if(flag)
                y++;
        }, 30);

        function start()
        {
            flag = true;
        }

        function stop()
        {
            flag = false;
        }

        start();
    </script>
</body>

这是一个工作的jsFiddle

如果将其从onload函数中移出,则DOM元素(特别是canvas )尚不存在。 有关DOM内容加载事件的更多信息,请参见https://stackoverflow.com/a/15564394/1370556

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM