大家在平时浏览网页的时候有没有见过下面这样的效果呢?
我们看到,图片的近处是模糊的,而远处是清晰的,我们把这种效果称为景深。 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)
,使其保持清晰。扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有