
大家在平时浏览网页的时候有没有见过下面这样的效果呢?

我们看到,图片的近处是模糊的,而远处是清晰的,我们把这种效果称为景深。 CSS 中有一个属性可以支持元素的平移、旋转、缩放或倾斜。同时,CSS 中还有一个属性可以将模糊或颜色偏移等图形效果应用于元素。大家可以试着通过 MDN 或者其他方式查找哪些 CSS 属性可以满足上述需求。 通常,我们会在 CSS 中对需要应用上述效果的元素直接书写相应的属性值。但是,如何根据场景动态修改上述属性值也是日常业务中常见的需求。 本节挑战,我们为大家提供这样的场景,希望大家能通过 JS 的方式为图片动态添加景深效果。
开始答题前,你需要确保基础代码已下载。如果没有成功下载,请点击并打开右侧环境窗口,然后在终端中键入以下命令,下载页面的基础代码:
wget https://labfile.oss.aliyuncs.com/courses/9203/06.zip && unzip 06.zip && rm 06.zip && cd 06具体操作参考下图:

可通过如下步骤测试效果:
06/index.html,选择 Open with Live Server。具体操作参考下图:

上述操作会在浏览器中打开新的标签页,如下图所示,请点击 06 文件夹:

之后,你将看到如下效果(默认情况下,图片均是模糊的):

请通过下述挑战要求,修改 03/index.html 文件,解决文本溢出的问题,最终达到如下效果:

请打开
06/index.html文件,该文件中有一段代码需要你补充,为图片添加景深效果。

img 标签设置清晰效果,对人物与枫叶林之外的 img 标签应保持模糊效果。
id 和 class 等属性值及 DOM 结构,以免造成检测失败。<html>
<head>
<META charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>为图片添加景深效果</title>
<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style06.css">
</head>
<body>
<header>
<div><img class="img1" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-1.png" title="枫叶林"></div>
<div><img class="img2" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-2.png" title="人物"></div>
<div><img class="img3" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-3.png"></div>
<div><img class="img4" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-4.png"></div>
<div><img class="img5" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-5.png"></div>
<div><img class="img6" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-6.png"></div>
</header>
<script>
// 获取所有的图片元素
const images = document.querySelectorAll('img');
// 为除了远处两张图片外的其他图片添加模糊效果
images.forEach((image) => {
if (image.classList.contains('img1') || image.classList.contains('img2')) {
// img1 和 img2 保持清晰
image.style.filter = 'blur(0px)';
}
});
</script>
</body>
</html>//index.html
<html>
<head>
<META charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>为图片添加景深效果</title>
<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style06.css">
</head>
<body>
<header>
<div><img class="img1" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-1.png" title="枫叶林"></div>
<div><img class="img2" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-2.png" title="人物"></div>
<div><img class="img3" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-3.png"></div>
<div><img class="img4" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-4.png"></div>
<div><img class="img5" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-5.png"></div>
<div><img class="img6" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-6.png"></div>
</header>
<script>
// 获取所有的图片元素
const images = document.querySelectorAll('img');
// 为除了远处两张图片外的其他图片添加模糊效果
images.forEach((image) => {
if (image.classList.contains('img1') || image.classList.contains('img2')) {
// img1 和 img2 保持清晰
image.style.filter = 'blur(0px)';
}
});
</script>
</body>
</html>详细解释:
<html>:这是 HTML 文档的根元素,所有的 HTML 内容都包含在其中。<head>:包含文档的元数据。 <META charset="utf-8">:指定文档的字符编码为 UTF-8,以确保能正确显示各种字符。<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">:设置视口的属性,包括宽度(设备宽度)、初始缩放比例、最大缩放比例以及禁止用户缩放。<title>为图片添加景深效果</title>:定义网页的标题,会显示在浏览器的标题栏中。<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style06.css">:引入外部样式表,可能包含一些页面的基本样式。<body>:包含页面的主要内容。 <header>:通常用作页面的头部区域。 <div><img class="img1" src="https://labfile.oss.aliyuncs.com/courses/9203/autumn-1.png" title="枫叶林"></div> 等:包含多个 div 元素,每个 div 元素内包含一个 img 元素。 img 元素: class 属性:用于给元素添加类,方便通过 CSS 和 JavaScript 进行样式和操作,这里有 img1 到 img6 等不同的类,可能用于区分不同的图片。src 属性:指定图片的来源。title 属性:为图片提供一个提示信息,当鼠标悬停在图片上时会显示该信息。// 获取所有的图片元素
const images = document.querySelectorAll('img');
// 为除了远处两张图片外的其他图片添加模糊效果
images.forEach((image) => {
if (image.classList.contains('img1') || image.classList.contains('img2')) {
// img1 和 img2 保持清晰
image.style.filter = 'blur(0px)';
}
});const images = document.querySelectorAll('img');:使用 document.querySelectorAll('img') 方法获取页面中所有的 img 元素,返回一个 NodeList 集合,存储在 images 变量中。images.forEach((image) => {...}):使用 forEach 方法遍历 images 集合中的每个元素。 if (image.classList.contains('img1') || image.classList.contains('img2')) {...}:检查当前元素的类名是否包含 img1 或 img2。image.style.filter = 'blur(0px)';:如果元素的类名是 img1 或 img2,将 filter 属性设置为 blur(0px),表示不进行模糊处理,保持清晰。三、工作流程 ▶️
document.querySelectorAll('img') 获取所有的图片元素。img1 或 img2 的元素,将其 filter 属性设置为 blur(0px),使其保持清晰。