从下至上展开抽屉动画
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title></title>
<style>
.container {
margin: auto;
top: 460px;
width: 320px;
height: 30px;
position: relative;
background-color: rgba(0, 0, 0, 0.4);
overflow-y: auto;
scroll-behavior: smooth;
border-radius: 20px;
}
::-webkit-scrollbar {
display: none;
}
.expend {
animation: expend ease 1s forwards;
}
.close-container {
animation: no-expend ease 1s forwards;
}
@keyframes expend {
from {
top: 460px;
height: 30px;
}
to {
height: 330px;
top: 160px;
}
}
@keyframes no-expend {
from {
height: 330px;
top: 160px;
}
to {
top: 460px;
height: 30px;
}
}
.close {
color: aliceblue;
right: 0;
margin: 5px 10px;
position: absolute;
}
.title {
color: aliceblue;
height: 30px;
line-height: 30px;
margin: 0 10px;
position: absolute;
}
.list {
display: flex;
flex-wrap: wrap;
white-space: nowrap;
padding-top: 24px;
}
.item {
width: 80px;
height: 80px;
margin: 40px;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
.item-img {
width: 40px;
height: 40px;
}
</style>
</head>
<body>
<div class='container' id='container'>
<div class='title'>抽屉标题</div>
<div class='close' onclick='closeHandle()'>↑</div>
<div class='list'>
<div class='item'>
<img src="./Icon_template.png" class="item-img">
<span class='item-text'>内容1</span>
</div>
<div class='item'>
<img src="./Icon_template.png" class="item-img">
<span class='item-text'>内容2</span>
</div>
<div class='item'>
<img src="./Icon_template.png" class="item-img">
<span class='item-text'>内容3</span>
</div>
<div class='item'>
<img src="./Icon_template.png" class="item-img">
<span class='item-text'>内容4</span>
</div>
<div class='item'>
<img src="./Icon_template.png" class="item-img">
<span class='item-text'>内容4</span>
</div>
</div>
</div>
<script>
const closeHandle = () => {
console.log('关闭和展开');
const dom = document.getElementById('container');
const closeDom = document.getElementsByClassName('close')[0];
if (!dom.className.match(/(?:^|\s)expend(?!\S)/)) {
dom.className = "container expend";
setTimeout(() => {
closeDom.innerText = 'X'
}, 100)
} else {
dom.className = "container close-container";
setTimeout(() => {
closeDom.innerText = '↑'
}, 100)
}
}
</script>
</body>
</html>