簡體   English   中英

畫布id沒有在javascript中被識別

[英]canvas id not being recongized in javascript

我試圖找到為什么我的html canvas元素在javascript中無法識別。

我不確定為什么我的canvas元素為null。 我在html中定義它,並且只在觸發DOMContentLoaded事件時運行javascript。

index.html的:

<!DOCTYPE html>
<html>
   <head>
      <title>Whiteboard</title>
      <meta charset="utf-8">
      <link rel="stylesheet" href="style.css" />
   </head>
   <body>
      <canvas id="canvas">Your browser doesn't support "canvas".</canvas>
      <!--<script src="/node_modules/socket.io/socket.io.js"></script>-->
      <script type="text/javascript" src="client1.js"></script>
   </body>
</html>

client1.js:

 document.addEventListener("DOMContentLoaded", function() {
       var mouse = { 
          click: false,
          move: false,
          pos: {x:0, y:0},
          pos_prev: false
       };
       // get canvas element and create context
       document.write("Hetoo   ");
       var canvas  = document.getElementById("canvas");
       if(canvas)
       {
           document.write("got her.");
       }
       else
       {
           document.write(canvas);
       }
       document.write("  Hepoo  ");
       var context = canvas.getContext('2d');
       document.write("Heyoo  ");
 }

網頁輸出:

Hetoo null Hepoo

我期待畫布不是null,但javascript由於某種原因無法識別。

有關為何發生這種情況的解釋,請參閱: JavaScript Document.Write替換所有正文內容

快速修復:使用console.log替換client1.js中的document.write調用

document.addEventListener("DOMContentLoaded", function() {
   var mouse = {
      click: false,
      move: false,
      pos: {x:0, y:0},
      pos_prev: false
   };
   // get canvas element and create context
   var mouse = {
      click: false,
      move: false,
      pos: {x:0, y:0},
      pos_prev: false
   };
   // get canvas element and create context
   console.log("Hetoo   ");
   var canvas  = document.getElementById("canvas");
   if(canvas)
   {
       console.log("got her.");
   }
   else
   {
       console.log(canvas);
   }
   console.log("  Hepoo  ");
   var context = canvas.getContext('2d');
   console.log("Heyoo  ");
})

您還應該考慮將腳本標記移動到head元素中,並使用asyncdefer屬性來控制它們的加載方式(如有必要)

我正在獲取上下文對象嘗試下面的代碼並讓我知道

 var canvas = document.getElementById("canvas"); console.dir(canvas.getContext('2d')); 
 <canvas id="canvas">Your browser doesn't support "canvas".</canvas> 

如果你刪除DOMContentLoaded監聽器它應該工作,看到這個答案:

DOMContentLoaded事件中的代碼無法正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM