我不知道为什么这个画布是空的

2024-02-27

因此,我一直在研究如何用其他图像填充画布的几个示例,一旦我稍微重新排列代码,它们就会停止工作。我注意到画布上的一些行为与其他类型的 JavaScript 变量相比没有意义,我想知道发生了什么。例如,如果我做这样的事情......

<!DOCTYPE HTML>
<html>
    <head>
        <script>
            var someVar = "This variable has been set";

            function aFunction(){
                alert(someVar);
            };
        </script>
    </head>
    <body onload="aFunction()">
        <canvas id="aCanvas" height="100" width="100"></canvas>
    </body>
</html>

...我收到一个弹出窗口,显示“此变量已设置”,这是我所期望的,但如果我执行这样的操作...

<!DOCTYPE HTML>
<html>
    <head>
        <script>
            var aCanvas = document.getElementById("aCanvas");
            var context;

            function aFunction(){
                try{
                    context = aCanvas.getContext("2d");
                    alert("it worked");
                }
                catch(err){
                    alert(err);
                }
            };
        </script>
    </head>
    <body onload="aFunction()">
        <canvas id="aCanvas" height="100" width="100"></canvas>
    </body>
</html>

...我收到一条警报,其中包含消息“TypeError:aCanvas 未定义”

然而,如果我尝试在尝试本身中以相同的方式定义画布......

<!DOCTYPE HTML>
<html>
    <head>
        <script>
            var aCanvas;
            var context;

            function aFunction(){
                try{
                    aCanvas = document.getElementById("aCanvas");
                    context = aCanvas.getContext("2d");
                    alert("it worked");
                }
                catch(err){
                    alert(err);
                }
            };
        </script>
    </head>
    <body onload="aFunction()">
        <canvas id="aCanvas" height="100" width="100"></canvas>
    </body>
</html>

我收到消息“它有效”

因此,如果我想将全局变量初始化为字符串或简单的东西,我可以在函数中引用它。如果我尝试将全局变量初始化为画布,我的函数会继续认为它为空。这是为什么?


在“onload”运行之前,当第一次解析 HTML 并运行脚本时,文档中没有元素。还没有达到<body> 标签还没有,所以“文档”是空的。这仍然是初始化纯 Javascript 变量以及其他一些东西的合适时机,但实际上大部分起始代码应该发生在“onLoad”内部。

简而言之:您的代码的成功很大程度上取决于when你打电话getElementById,而不是在哪里var aCanvas声明是。希望对您的理解有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我不知道为什么这个画布是空的 的相关文章

随机推荐

  • Loopback.io 的 ACL 问题

    我目前正在评估用于开发新项目的 API 部分的 Loopback io 但在设置正确的 ACL 条目时遇到问题 我希望完成的是给定一个身份验证令牌 GET 端点应该只返回用户拥有的对象 例如 对 Shows access token xxx
  • 什么是“SQLiteDatabase 创建且从未关闭”错误?

    我已经在我的适配器类中关闭了数据库 那么为什么这个错误显示在 logcat 上 但我的应用程序不强制关闭 但只有错误显示在 log cat 上 我应该关闭数据库以忽略此错误 我的错误是 下面 我离开哪个类来关闭数据库 我从此链接获取帮助ht
  • C#,求一个数的最大素因数

    我是编程新手 正在练习我的 C 编程技能 我的应用程序旨在查找用户输入的数字的最大素因数 但我的应用程序没有返回正确的答案 我真的不知道问题出在哪里 你能帮我么 using System using System Collections G
  • 从 Action Script 到 C# 的 Rijndael 加密

    我正在尝试在 Action Script 和 C 之间共享加密 我的任务是在 C 中解密以下消息 f1ca22a365ba54c005c3eb599d84b19c354d26dcf475ab4be775b991ac97884791017b1
  • UUID 转换为无符号整数

    有没有地方可以将 UUID 压缩 转换 编码 加密为无符号整数 我从 sql 表中读取 UUID 历史记录很难看 我无法更改 我只有一个 unsigned int 来存储它 这是 C 以防产生影响 对此有什么想法吗 谢谢 礼萨 正如其他人所
  • 在两个容器之间共享/tmp

    我在用着docker compose生成两个容器 我想分享 tmp这两个容器之间的目录 但不与主机 tmp如果可能的话 这是因为我正在通过上传一些文件flask to tmp并想要处理这些文件celery flask build comma
  • 撤销 IdentityServer4 中特定会话的访问令牌(参考)

    我在用IdentityServer 4带有参考标记的隐式流程 我自己做了一个实现IPersistedGrantStore https github com IdentityServer IdentityServer4 blob releas
  • SVG使用element来克隆SVG

    是否可以在单独的 svg 中 使用 整个其他 svg 我想使用 d3 生成的地图作为同一页面上的图标 这是我尝试过的 但它不起作用
  • Angualr2 错误:无法设置仅具有 getter 的 # 的属性值

    表格看起来像
  • IntelliJ + JUnit 5(木星)

    My build gradle has testCompile org junit jupiter junit jupiter api 5 0 0 使用标准示例http junit org junit5 docs current user
  • XmlSerializer 和 IEnumerable:可以进行序列化,无需无参数构造函数:Bug?

    在我们的项目中 我们广泛使用 XmlSerializer 偶然我发现了一个没有无参数构造函数的类 我认为这一定会破坏序列化过程 但事实并非如此 通过调查这个问题 我发现 XmlSerializer 在序列化 反序列化时表现得很奇怪IE可枚举
  • 在 git 中为每个部署构建创建一个标签是一个好习惯吗?

    我刚刚从 Subversion 切换到 Git Subversion 的集中式架构为其提供了一个有意义的修订号 我将其构建到基于 Web 的应用程序的更改日志中 以便轻松登录并查看任何给定服务器上正在运行的版本 Git 没有友好的内部版本号
  • 如何使用 REST API 为领事附加手表?

    我使用 REST API 来访问领事 例如 这是我创建条目的方法 curl X PUT d localhost 8500 v1 kv example lt lt lt FooValue 我想添加watches当键值更改时通知我的服务的领事
  • 将函数发布到门户后,Azure 函数在函数列表中不可见

    我是Azure函数的新手 在函数发布到门户后发现这里 但它在函数列表中不可见 我附上了示例代码的快照和一个空的天蓝色列表 请帮忙 添加kudu ui 这里我找到了 wwwroot下唯一的host json Hi All 添加了kudu ui
  • 如何定义 Airflow 上 STFP Operator 的操作?

    class SFTPOperation object PUT put GET get operation SFTPOperation GET NameError name SFTPOperation is not defined 我在这里定
  • 维吉尼亚密码解密

    我正在尝试使用维吉尼亚密码进行加密和解密 这是一项更大任务的一部分 而维吉尼亚密码只扮演了一小部分 我从 bash 得到了这个加密脚本 可以正常工作 问题是我如何反向使用相同的代码来解密代码 usr local bin bash vigen
  • Java / Android 编程 - 循环失败

    我正在使用带有计时器的 while 循环 问题是计时器并不是在每个循环中都使用 仅在第一次使用 第一次之后 循环内包含的语句将在没有我设置的延迟的情况下执行 既然计时器包含在 while 循环内 这怎么可能呢 有什么解决办法吗 int co
  • 如何在 HTML 中将文本和图像并排放置?

    我希望文本和图像彼此相邻 但我希望图像位于屏幕的最左侧 而我希望文本位于屏幕的最右侧 这就是我目前所拥有的 img src website art png height 75 width 235 h3 font face Verdana T
  • 如何确定 Django 模型中的类实例是否是另一个模型的子类?

    我有一堂课叫BankAccount作为基类 我也有CheckingAccount and SavingsAccount继承自的类BankAccount BankAccount 不是一个抽象类 但我不从中创建对象 只创建继承类 然后 我执行如
  • 我不知道为什么这个画布是空的

    因此 我一直在研究如何用其他图像填充画布的几个示例 一旦我稍微重新排列代码 它们就会停止工作 我注意到画布上的一些行为与其他类型的 JavaScript 变量相比没有意义 我想知道发生了什么 例如 如果我做这样的事情