Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element' 我收到这个错误

Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element' I am getting this error

我是 Javascript 的新手,我不明白为什么会出现此错误。 这是我的代码:

const bckg = document.querySelector(".bckg");
const compStyle = getComputedStyle(bckg);
body {
    box-sizing: content-box;
    position: relative;
}   
.visible {
    position: relative;
    top: 50px;
    margin: auto;
    background-color: bisque;
    height: 300px;
    width: 600px;
    overflow: hidden;
    

}
.bckg {
    position: absolute;
    left: 0px;
    width: 1200px;
    height: 300px;
    background-image: url("bckg.jpg")
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>New Game</title>
    <link rel="stylesheet" href="styles.css">
   
</head>
<body>
    <script src="script.js"></script>
    <div class="visible">
        <div class="bckg" id="bckg">
            <div class="player"></div>
            <div class="obstacle"></div>
        </div>
    </div>
</body>
</html>

我在 Mozilla 中遇到此错误:“未捕获的类型错误:Window.getComputedStyle:参数 1 不是对象。” 可能是什么?

您的脚本标签需要移至正文的最后。脚本加载到早期。如果您阅读错误消息。找不到参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>New Game</title>
    <link rel="stylesheet" href="styles.css">
   
</head>
<body>
    
    <div class="visible">
        <div class="bckg" id="bckg">
            <div class="player"></div>
            <div class="obstacle"> 
            </div>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>

Delta Boukensha 是对的 - 您的文档尚未加载完毕。 因此,要么按照 Delta 的建议将脚本放在标记的底部,要么在文档呈现后使用实用函数 运行 代码,例如:

function whenDOMready( func ) {
  switch( String( document.readyState ) ) {
    case "complete":
    case "loaded":
    case "interactive":
      func();
      break;
    default:
      window.addEventListener("DOMContentLoaded", (e) => func());
  }
}

然后像这样从任何地方调用它:

let bckg;
let compStyle;

function domReady() {
    bckg = document.querySelector(".bckg");
    compStyle = getComputedStyle(bckg);
    /* ...other code here */
}

whenDOMready( domReady );

此实用程序为您带来两个好处:

  1. 无论您何时调用它,它都会起作用——要么立即调用您的函数 (func),要么在 DOMContentLoaded 事件触发时调用。如果你只是直接添加事件侦听器,你必须担心它是否已经触发。
  2. 您保证您的 DOM 已准备好接受检查和访问。