📅  最后修改于: 2023-12-03 15:15:40.720000             🧑  作者: Mango
在 HTML 中,我们可以使用 JavaScript 脚本来实现各种操作。但是,如果我们把 JavaScript 放在 HTML 文件的头部或者中间部分,脚本就会在文档加载之前就被执行了。
如果我们希望脚本在文档加载完之后再被执行,该怎么办呢?这就要使用到 HTML 加载后运行脚本的方法。
在 HTML 中,我们可以使用 <script>
元素来加载 JavaScript 脚本。有两种方法可以在 HTML 中加载脚本:
将脚本嵌入 HTML 文件中的方式,就是在 <script>
标签中直接编写 JavaScript 脚本。例如:
<!DOCTYPE html>
<html>
<head>
<title>将脚本嵌入 HTML 文件中</title>
<script>
function doSomething() {
alert('Hello World!');
}
</script>
</head>
<body>
<button onclick="doSomething()">Click Me</button>
</body>
</html>
在这个例子中,我们在 <head>
标签中添加了一个 <script>
元素,然后在其中编写了一个 doSomething()
函数。在 HTML 文件的正文部分,我们添加了一个按钮,当用户单击该按钮时,就会执行 doSomething()
函数。
注意,在将脚本嵌入 HTML 文件中的方式中,脚本会在文档加载过程中被立即执行。因此,如果我们想要在文档加载完之后再执行脚本,需要使用后面介绍的技巧。
外部引入 JavaScript 文件的方式,就是在 <script>
标签的 src
属性中指定 JavaScript 文件的 URL。例如:
<!DOCTYPE html>
<html>
<head>
<title>外部引入 JavaScript 文件</title>
<script src="scripts/myscript.js"></script>
</head>
<body>
<button onclick="doSomething()">Click Me</button>
</body>
</html>
在这个例子中,我们在 <head>
标签中添加了一个 <script>
元素,并在其中使用 src
属性指定了要引入的 JavaScript 文件的 URL。该文件位于 scripts/myscript.js
目录下。在 HTML 文件的正文部分,我们添加了一个按钮,当用户单击该按钮时,会执行从外部引入的脚本中的 doSomething()
函数。
通常情况下,浏览器会在下载 JavaScript 文件时暂停文档的解析和渲染,直到脚本下载并被执行完毕。在一些情况下,这样会导致页面加载速度变慢,用户体验不佳。为了解决这个问题,我们可以使用延迟加载脚本的方式。
延迟加载脚本的方式就是在 <script>
标签中添加 defer
属性。例如:
<!DOCTYPE html>
<html>
<head>
<title>延迟加载脚本</title>
<script src="scripts/myscript.js" defer></script>
</head>
<body>
<button onclick="doSomething()">Click Me</button>
</body>
</html>
在这个例子中,我们在 <head>
标签中添加了一个 <script>
元素,并使用 defer
属性指定要延迟加载的脚本文件的 URL。在 HTML 文件的正文部分,我们添加了一个按钮,当用户单击该按钮时,会执行从外部引入的脚本中的 doSomething()
函数。
使用 defer
属性时,浏览器会在文档解析过程中并行下载 JavaScript 文件,并在文档解析完毕后按照顺序依次执行这些脚本。因此,defer
属性可以确保脚本在文档加载完之后再被执行。
需要注意的是,defer
属性只适用于外部引入的 JavaScript 文件,不适用于将脚本嵌入 HTML 文件中的方式。
除了使用 defer
属性之外,我们还可以使用 DOMContentLoaed
事件来延迟脚本的运行。
DOMContentLoaded
事件是浏览器在加载 HTML 文件时触发的事件,它表示文档解析完毕,但是不包括图片、脚本和样式表等外部资源的加载完毕。我们可以在监听该事件的回调函数中执行 JavaScript 脚本,以确保脚本在文档加载完之后再被执行。
例如:
<!DOCTYPE html>
<html>
<head>
<title>在DOMContentLoaded事件中运行脚本</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
doSomething();
});
</script>
</head>
<body>
<button onclick="doSomething()">Click Me</button>
</body>
</html>
在这个例子中,我们在 <head>
标签中添加了一个 <script>
元素,在其中监听了 DOMContentLoaded
事件,并在回调函数中调用了 doSomething()
函数。在 HTML 文件的正文部分,我们添加了一个按钮,当用户单击该按钮时,会执行从外部引入的脚本中的 doSomething()
函数。
使用 DOMContentLoaded
事件的方式,同样可以确保脚本在文档加载完之后再被执行。
在 HTML 中加载 JavaScript 脚本的方式有两种:将脚本嵌入 HTML 文件中,或者外部引入 JavaScript 文件。为了确保脚本在文档加载完之后再被执行,我们可以使用 defer
属性或者监听 DOMContentLoaded
事件。使用 DOMContentLoaded
事件可以确保脚本在加载完之后再被执行,但是需要编写额外的 JavaScript 代码。使用 defer
属性可以简化代码,但是只适用于外部引入的 JavaScript 文件。