vue animation css实现左右折叠面板

6 篇文章 0 订阅
<div class="left" :class="boxshow ? 'a1': 'a2'" id="showBox">
  这里是折叠面板的内容
</div>
<i id="left" class="el-icon-d-arrow-left" @click="boxshow = !boxshow" :class="boxshow ? 'a3': 'a4'"></i>
<i id="right" class="el-icon-d-arrow-right" @click="boxshow = !boxshow" :class="boxshow ? 'a5': 'a6'"></i>
boxshow: true
watch: {
    boxshow(val){
      if(!val){
        // 要确定渲染完了才可以读取dom节点
        setTimeout(() => {
          document.getElementById('showBox').style.display = 'none'
          document.getElementById('left').style.display = 'none'
          document.getElementById('right').style.display = 'block'
        }, 1800)
      }else{
        document.getElementById('showBox').style.display = 'block'
        document.getElementById('left').style.display = 'block'
        document.getElementById('right').style.display = 'none'
      }
      
    }
  },
.left{
    // 动画显示的最大宽度
    width: 230px;
}
// 面板内容显示隐藏动画
@keyframes out1{
  0%   {width: 230px;opacity: 1;}
  25%  {width: 150px;opacity: 0.8;}
  50%  {width: 100px;opacity: 0.6;}
  75%  {width: 50px;opacity: 0.3;}
  100% {width: 0px;opacity: 0;}
}
@keyframes in1{
  0%   {width: 0px;opacity: 0;}
  25%  {width: 50px;opacity: 0.3;}
  50%  {width: 100px;opacity: 0.6;}
  75%  {width: 150px;opacity: 0.8;}
  100% {width: 230px;opacity: 1;}
}
.a1{
  animation: in1 2s linear;
}
.a2{
  animation: out1 2s linear;
}
// 按钮显示隐藏动画  16px 是 按钮的宽度
@keyframes l1{
  0%   {width: 0px;left: 0px;opacity: 0;}
  50%  {width: 10px;left: 100px;opacity: 0.5;}
  100% {width: 16px;left: 250px;opacity: 1;}
}
@keyframes l2{
  0%   {width: 16px;left: 250px;opacity: 1;}
  50%  {width: 10px;left: 100px;opacity: 0.5;}
  100% {width: 0px;left: 0px;opacity: 0;}
}
@keyframes r1{
  0%   {width: 0px;left: 0px;opacity: 0;}
  50%  {width: 10px;left: 0px;opacity: 0.5;}
  100% {width: 16px;left: 0px;opacity: 1;}
}
@keyframes r2{
  0%   {width: 16px;left: 0px;opacity: 1;}
  50%  {width: 10px;left: 0px;opacity: 0.5;}
  100% {width: 0px;left: 0px;opacity: 0;}
}
.a3{
  // 左进 true 
  animation: l1 2s linear;
}
.a4{
  // 左出
  animation: l2 2s linear;
}
.a5{
  // 右进 false 
  animation: r1 2s linear;
}
.a6{
  // 右出
  animation: r2 2s linear;
}
.el-icon-d-arrow-left, .el-icon-d-arrow-right{
  position: absolute;
  top: 50%;
  left: 250px;
  z-index: 99;
  background-color: white;
  height: 100px;
  line-height: 100px;
}
.el-icon-d-arrow-right{
  left: 0px;
  display: none;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值