当前位置: 首页 > Web前端 > HTML

[JS30-WesBos]flex容器实现的图库特效

时间:2023-03-27 23:20:45 HTML

标题:【原生javascript项目】FlexPanel05日期:2021-11-1720:10:40标签:原生javascript项目分类:30个原生javascript项目介绍一动态投影网页,知识点主要涉及flex容器和元素点击事件。效果网址:https://janice143.github.io/f...正文1.html部分主要由5个div元素组成将网页分成5块,横向排列。每个div元素中有3个p标签,分别对应三个段落。

让我们

跳舞

Give

Take

Receive

体验

今天

全部

你可以

Life

In

Motion

二、css代码的css部分主要是实现5个div元素的水平统一排列,每个div元素都有对应的背景图片和3个p标签的文字P标签文本在每个div元素中也是左右居中,上下均匀排列。主要是使用flex容器来实现的。1Flex容器参考网址:https://www.ruanyifeng.com/bl...采用Flex布局的元素称为flex容器,简称“容器”。它的所有子元素都会自动成为称为弹性项目或简称为“项目”的容器的成员。容器的属性:flex-direction:项目的排列方向flex-wrap:默认情况下,项目排列在一条线上(也称为“轴”)。flex-wrap属性定义了轴线不适合时如何换行。flex-flow:flex-direction属性和flex-wrap属性的缩写形式justify-content:项目在主轴上的对齐方式align-items:项目如何在横轴上对齐align-content:定义多个轴的对齐方式item的属性:order:item的排列顺序,值越小排列越高flex-grow:定义item的放大比例,默认为0flex-shrink:item的收缩比例,默认为1flex-basis:item占用的主轴空间flex:flex-grow、flex-shrink和flex-basis的简写,默认值为01autoalign-self:允许单个item有不同的空间与其他项目对齐,可以覆盖align-items属性2cssfonttext-transform:uppercase;font-family:'AmaticSC',cursive;text-shadow:004pxrgba(0,0,0,0.72),0014pxrgba(0,0,0,0.45);3transitionstyletransition:font-大小0.7s立方贝塞尔(0.61,-0.19,0.7,-0.11),flex0.7s立方贝塞尔(0.61,-0.19,0.7,-0.11),背景0.2s;transform:translateY(-100%);4背景图像背景大小:封面;背景位置:中心;.panel1{背景图像:url(https://source.unsplash.com/gYl-UtwNg_I/1500x1500);}.panel2{背景图像:url(https://source.unsplash.com/rFKUFzjPYiQ/1500x1500);}.panel3{背景d-image:url(https://images.unsplash.com/photo-1465188162913-8fb5709d6d57?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&w=1500&h=1500&fit=crop&s=967e8a713a4e392fc260c793);}.panel4{背景图像:url(https://source.unsplash.com/ITjiVXcwVng/1500x1500);}.panel5{背景图像:url(https://source.unsplash.com/3MNzGlQM7qs/1500x1500);}5othersCSS选择器*将匹配文档的所有元素;>组合器选择作为前一个元素的直接子节点的节点.panel>*选择名为panel的类,所以我写的程序的直接子元素js部分,大致思路是在html代码中设置onclick属性,然后在js中写功能内容,不同的panel传入不同的参数来定位类有两个以上的标签document.getElementsByClassName(panel${num}panel-open);//点击12345号面板,为对应的面板函数添加.panel-open属性clickOpen(num){constpanelNumIf=document.getElementsByClassName(`panel${num}panel-open`);constpanelNum=document.getElementsByClassName(`panel${num}`);//console.log(panelNumIf[0])if(panelNumIf[0])panelNumIf[0].classList.remove('panel-open');elsepanelNum[0].classList.add('panel-open');//添加面板打开类属性console.log(`panel${num}panel-open`);};别人程序的大致思路是遍历5个Panel,监听是否有点击事件,有则运行toggleOpen函数。这个函数中的this.classList.toggle('open')的意思是如果this有一个open的类名就删除,没有就添加。e.propertyName获取transitionend的属性名,e.propertyName.includes('flex')包含flex字段的属性名constpanels=document.querySelectorAll('.panel');functiontoggleOpen(){console.log('你好');this.classList.toggle('open');}functiontoggleActive(e){console.log(e.propertyName);if(e.propertyName.includes('flex')){this.classList.toggle('open-active');}}panels.forEach(panel=>panel.addEventListener('click',toggleOpen));panels.forEach(panel=>panel.addEventListener('transitionend',toggleActive));完整代码总结在Github上,有兴趣的读者不妨一试。