欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 蓝桥杯 - 简单 - 布局切换

蓝桥杯 - 简单 - 布局切换

2025/3/25 21:43:03 来源:https://blog.csdn.net/2302_81312344/article/details/146476822  浏览:    关键词:蓝桥杯 - 简单 - 布局切换

介绍

为了提高用户体验,网站有时需要多种浏览模式。现在特邀请你为蓝桥官网设计具有经典、浏览和工具三种布局模式。使用户可以根据具体情况选择合适的模式,以便更好地浏览网页内容。

本题需要在已提供的基础项目中使用 JS 完善代码实现布局的切换。

准备

开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:

├── css
├── images
├── index.html
├── effect.gif
└── js└── index.js

其中:

  • css 是样式文件夹。
  • images 是图片文件夹。
  • index.html 是主页面。
  • effect.gif 是最终完成效果图。
  • js/index.js 是待补充代码的 js 文件。

在浏览器中预览 index.html 页面效果如下:

目标

完善 js/index.js 的 TODO 部分的代码,实现被点击的模式元素(class=layout-option)处于激活状态,即添加一个类名(active),其他(class=layout-option)移除激活状态,即移除类名(active)。

最终效果可参考文件夹下面的 gif 图,图片名称为 effect.gif(提示:可以通过 VS Code 或者浏览器预览 gif 图片)。

规定

  • 请勿修改 js/index.js 文件外的任何内容。
  • 请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径、class 名、id 名、图片名等,以免造成判题⽆法通过。
<!DOCTYPE html>
<html>
<head><title>布局切换</title><link rel="stylesheet" href="./css/style.css">
</head>
<body><div class="navbar"><a href="#">首页</a><a href="#">关于我们</a><a href="#">服务</a><a href="#">联系我们</a><div class="search-container"><input type="text" class="search-box" placeholder="输入关键词搜索..."></div><div class="icons"><img id="switching" src="./images/icon.svg" alt=""><img src="./images/setting.svg" alt=""></div></div><div id="tool"><div class="search-container"><input type="text" class="search-box" placeholder="输入关键词搜索..."></div><div class="quick-nav"><ul class="list"><li class="header">快捷导航</li><li class="item">蓝桥云课-web课程</li><li class="item">蓝桥云课-java课程</li><li class="item">蓝桥云课-测试课程</li><li class="item">蓝桥云课官网</li><li class="item">蓝桥云课-个人主页</li><li class="item">蓝桥云课</li></ul></div></div><div class="layout-list" id="mode"><figure><img id="one" class="layout-option  active" src="./images/classic.svg" alt=""><figcaption>经典模式 <img src="./images/select.svg" alt=""></figcaption></figure><figure><img id="two" class="layout-option" src="./images/browse.svg" alt=""><figcaption>浏览模式 <img src="./images/select.svg" alt=""></figcaption></figure><figure><img id="three" class="layout-option" src="./images/tool.svg" alt=""><figcaption>工具模式 <img src="./images/select.svg" alt=""></figcaption></figure></div><div id="layoutContainer" class="two-column-layout"><div class="column"><h2>栏目1</h2><p>这是栏目1的内容。</p></div><div class="column"><h2>栏目2</h2><p>这是栏目2的内容。</p></div><div class="column"><h2>栏目3</h2><p>这是栏目3的内容。</p></div></div><script src="./js/index.js"></script>
</body></html>
// 获取元素
const layoutContainer = document.getElementById('layoutContainer'); // 布局元素
const layoutOptions = document.querySelectorAll('.layout-option'); // 三个模式元素
const switching = document.getElementById('switching'); // 模式按钮// 显示模式
switching.addEventListener('click', function () {mode.style.display = 'flex'; // 设置显示为flex布局
});// 遍历选项
layoutOptions.forEach(function (option) {// 经典模式,浏览模式,工具模式点击事件option.addEventListener('click', function () {// TODO:待补充代码// 移除所有模式元素的 active 类名layoutOptions.forEach(function (item) {item.classList.remove('active');});// 给当前点击的元素添加 active 类名this.classList.add('active');// 箭头函数形式// layoutOptions.forEach((item)=>{//     item.classList.remove('active')// })// this.classList.add('active')// TODO:END //  以下代码无需修改// 根据不同选项进行布局处理if (this === layoutOptions[0]) {// Classic modetool.style.display = "none"; // 隐藏工具layoutContainer.classList.add('two-column-layout'); // 添加两列布局类layoutContainer.classList.remove('three-column-layout'); // 移除三列布局类} else if (this === layoutOptions[1]) {// Browse modetool.style.display = "none"; // 隐藏工具layoutContainer.classList.add('three-column-layout'); // 添加三列布局类layoutContainer.classList.remove('two-column-layout'); // 移除两列布局类} else if (this === layoutOptions[2]) {// Tool modetool.style.display = 'flex'; // 显示工具}mode.style.display = 'none'; // 隐藏布局容器});
});

  • classList 是元素的一个属性,它提供了对元素类名的操作方法。
  • classList.add() ;classList.remove();
  • 切换类名:classList.toggle();如果元素已经有该类名,则移除它;如果没有,则添加它。
  • 检查类名是否存在:classList.contains() 方法用于检查元素是否包含指定的类名。
  • 批量操作类名:
  • const element = document.getElementById('myElement');
    element.classList.add('class1', 'class2', 'class3');
    element.classList.remove('class1', 'class2');

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com