我有一个显示链接列表的左栏。当点击一个折叠图标时,我希望以下按顺序发生:
- 要淡出的文本
- 要减小到设定宽度的条形宽度(已设置动画(
- 用于图标淡入
UI现在应该是一个左栏,有两个图标,没有文本。
之后单击展开按钮时,我希望出现相反的情况。
- 要淡出的图标
- 要增加到设定宽度的条形宽度(已设置动画(
- 使文本淡入
UI现在应该恢复正常,宽度增加,每个LI都显示其标题和描述。没有图标。
下面是我所能做到的。我将使用Javascript框架通过基于数据切换一个类来执行此操作,但出于演示目的,我使用jQuery连接了一个按钮来切换菜单状态。
$(document).ready(function(){
$('#button').click(function(){
$('.container').toggleClass("toggleOn toggleOff");
})
})
body {
margin:0;
}
ul {
list-style:none;
}
.icon {
width: 20px;
height: 20px;
border-radius: 100%;
background: #007cbe;
opacity:0;
}
.text h2,
.text p {
margin:0; padding: 0;
}
li {
margin-bottom:20px;
}
.text {
max-height:200px;
}
/* Transitions */
.toggleOn .text {
overflow: hidden;
transition-delay:5000ms;
max-height: 0px;
opacity: 0;
transition: max-height 0ms 5000ms, opacity 4000ms 0ms;
}
.toggleOn .menu-slider {
overflow: hidden;
transition-delay:5000ms;
width: 8rem;
transition: width 2000ms 5000ms;
}
.toggleOff .menu-slider {
width: 20rem;
}
.toggleOn .menu-slider {
background:orange;
}
.toggleOff .menu-slider {
background:pink;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container toggleOff">
<div class="menu-slider">
<ul>
<li>
<div class="icon"></div>
<div class="text">
<h2> Title </h2>
<p> Description </p>
</div>
</li>
<li>
<div class="icon"></div>
<div class="text">
<h2> Title 2 </h2>
<p> Description 2 </p>
</div>
</li>
</ul>
</div>
</div>
<button id="button">Test</button>
已解决。
$(document).ready(function(){
$('#button').click(function(){
$('.container').toggleClass("toggleOn toggleOff");
})
})
body,
.text h2,
.text p,
ul {
margin:0; padding: 0;
}
.container {
width: 100%;
height:100%;
}
.menu-slider {
height: 100%;
}
ul {
list-style:none;
}
li {
padding:10px 0;
}
.icon {
width: 0rem;
height: 0rem;
border-radius: 100%;
background: #007cbe;
opacity:0;
}
.text {
max-height:200px;
}
/* Transitions */
.toggleOn .text {
overflow: hidden;
max-height: 0px;
opacity: 0;
transition: max-height 0ms 5000ms, opacity 4000ms 0ms;
}
.toggleOn .menu-slider {
overflow: hidden;
transition-delay:5000ms;
width: 8rem;
transition: width 2000ms 5000ms;
}
.toggleOn .icon {
overflow: hidden;
width: 2rem;
height: 2rem;
opacity: 100;
background-color:purple;
transition: opacity 1000ms 9000ms, width 1000ms 9000ms, height 1000ms 9000ms;
}
.toggleOff .icon {
overflow: hidden;
width: 0rem;
height: 0rem;
opacity: 0;
transition: opacity 150ms 0ms, width 150ms 4000ms, height 150ms 4000ms;
}
.toggleOff .menu-slider {
overflow: hidden;
width: 20rem;
transition: width 2000ms 6000ms;
}
.toggleOff .text {
overflow: hidden;
max-height: 300px;
opacity: 100;
transition: max-height 0ms 6000ms, opacity 4000ms 7000ms;
}
.toggleOn .menu-slider {
background:orange;
}
.toggleOff .menu-slider {
background:pink;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container toggleOff">
<div class="menu-slider">
<ul>
<li>
<div class="icon"></div>
<div class="text">
<h2> Title </h2>
<p> Description </p>
</div>
</li>
<li>
<div class="icon"></div>
<div class="text">
<h2> Title 2 </h2>
<p> Description 2 </p>
</div>
</li>
</ul>
</div>
</div>
<button id="button">Test</button>