Day05 - Flex 实现可伸缩的图片墙 中文指南
作者:©Mrlin(史密斯林)
简介:学习记录,用于记录在CSDN课程中的学习内容。
课程:30天完成30个JS原生开发项目挑战视频教程。JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。
实现效果
点击任意一张图片,图片展开,同时从图片上下两方分别移入文字。点击已经展开的图片后,图片被压缩,同时该图片上下两端的文字被挤走。
HTML源码
1 | <div class="panels"> |
初始文档的 DOM 结构:以 .panels 为父 div 之下,有 5 个类名为 .panel 的 div,这 5 个各含有 3 个子 p 标签。而相应的 CSS 样式中,动画时间等特性已经设定好,只需要完成不同状态下的页面布局以及事件监听即可。
CSS 源码
1 | <style> |
CSS 在这个过程中占了重点,运用 flex 可以使各个元素按一定比例占据页面。在调试的时候,可以把边框显示出来方便查看效果。(border: 1px solid #f00;)
- 将
.panels设置为display:flex - 设定每个子
panel的flex值为1 - 针对每个子
panel,设为display:flex,设置其 flex 主轴方向 - 控制
.panle的子元素<p>中的文字垂直、水平居中(单独看每个 panel,其中的文字也可以用 flex 的思路来使其三等分后居中)- 设置为
display:flex - 设置
flex值 - 设置其子元素的布局方式:垂直水平居中(沿主轴、侧轴居中)
- 设置为
- 设定点击图片后文字移动的样式
- 设定点击图片展开后的图片的
flex值
重要:不了解CSS和Flex的童鞋必看。
JS源码
1 | <script> |
- 获取所有类名为
panel的元素 - 为其添加
click事件监听,编写触发事件调用的函数(给触发的 DOM 元素添加/去掉样式,实现拉伸/压缩的效果) - 为其添加
transitionend事件监听,编写调用的函数(添加/去掉样式,实现文字的飞入/飞出效果)