vue的列表加载过渡动画

博客主要介绍了效果实现的方法,重点是 sass 的写法,包含 sass for loop 方法,还介绍了 Sass if else 用法及 @while 的简单用法,并给出了重点代码和完整代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

重点代码:

html :   :class="`animation-${index+1}`"
css :
   $grid-columns: 10;
  @for $i from 1 through $grid-columns {
    $time: ($i * 100+200) + ms;
    .animation-#{$i} {
      animation-delay: $time;
    }
  }

完整代码如下:

<template>
  <div class="content">
    <div v-for="(item,index) in new Array(10)" :key="index" class="box" :class="`animation-${index+1}`"> </div>
  </div>
</template>
<script>
export default {
  name: "listLoadAnimation",
  components: {},
  methods: {}
};
</script>

<style lang="scss" scoped>
$grid-columns: 10; 
.content {
  padding: 0.3rem;
  .box {
    width: 100%;
    height: 2rem;
    background: red;
    margin-bottom: 0.3rem;
    box-shadow: 0 0 0.2rem rgba($color: #000000, $alpha: 1);
  }

  @for $i from 1 through $grid-columns {
    $time: ($i * 100+200) + ms;
    .animation-#{$i} {
      transition: all 0.5s linear;
      animation-name: toTop; // toBottom
      animation-duration: 0.5s; // 注释掉 会没有动画 就是帕帕一帧一帧的出来
      animation-fill-mode: both;
      animation-delay: $time;
    }
  }
}
// 方向 下-->上
@keyframes toTop {
  0% {
    opacity: 0;
    transform: translate3d(0, 100%, 0);
  }

  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}
// 方向 上-->下
@keyframes toBottom {
  0% {
    opacity: 0;
    transform: translate3d(0, -100%, 0);
  }

  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

</style>

  • 这里再次介绍一个 Sass if else 的用法(针对上述的代码修改)
  @for $i from 1 through $grid-columns {
    $time: ($i * 100+200) + ms;
    .animation-#{$i} {
      transition: all 0.5s linear;
      animation-duration: 0.5s;
      animation-fill-mode: both;
      animation-delay: $time;
      @if $i%2==0 {
        animation-name: toLeft;
      } @else {
        animation-name: toRight;
      }
    }
  }

css:

// 方向 右-->左
@keyframes toLeft {
  0% {
    opacity: 0;
    transform: translate3d(-30px, 0, 0);
  }

  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}
// 方向 左-->右
@keyframes toRight {
  0% {
    opacity: 0;
    transform: translate3d(30px, 0, 0);
  }

  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

效果图:
在这里插入图片描述

  • @while的简单用法:
$types: 4
$type-width: 20px

@while $types > 0
  .while-#{$types}
    width: $type-width + $types
  $types: $types - 1

转化成以下代码

.while-4 {
  width: 24px;
}

.while-3 {
  width: 23px;
}

.while-2 {
  width: 22px;
}

.while-1 {
  width: 21px;
}
### Vue2 中实现路由过渡动画的方法 在 Vue2 中,可以通过 `<transition>` 组件来实现路由之间的过渡动画效果。以下是具体实现方式以及最佳实践: #### 使用 `<transition>` 包裹 `<router-view>` 通过将 `<transition>` 组件包裹住 `<router-view>`,可以轻松定义进入和离开的动画效果[^3]。 ```html <template> <div id="app"> <!-- 定义 transition --> <transition name="fade"> <router-view></router-view> </transition> </div> </template> <style> /* 进入动画 */ .fade-enter-active { animation: fadeIn 0.5s ease-in-out; } /* 离开动画 */ .fade-leave-active { animation: fadeOut 0.5s ease-in-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } </style> ``` 上述代码展示了如何使用 `fadeIn` 和 `fadeOut` 的 CSS 动画来完成淡入淡出的效果。 #### 自定义动画库集成 如果需要更复杂的动画效果,可以选择引入第三方动画库,例如 **animate.css** 或者自定义关键帧动画[^1]。以下是一个基于 animate.css 的例子: ```html <template> <div id="app"> <transition name="custom-classes-transition" enter-active-class="animated slideInRight" leave-active-class="animated slideOutLeft"> <router-view></router-view> </transition> </div> </template> <script> import 'animate.css'; export default {}; </script> ``` 在这个例子中,我们利用了 animate.css 提供的标准类名 `slideInRight` 和 `slideOutLeft` 来分别设置进入和退出时的动画效果。 #### 配置 appear 属性 为了使页面初次加载时也能够触发动画,可以在 `<transition>` 上添加 `appear` 属性[^5]。这样即使是在第一次渲染组件时也会应用指定的动画。 ```html <transition name="fade" appear> <router-view></router-view> </transition> ``` 以上配置会确保当用户访问网站的第一屏内容时也能看到平滑的过渡效果。 #### 结合动态参数调整动画行为 有时可能希望根据不同场景改变动画的表现形式,则可通过绑定动态 class 实现这一需求。 ```javascript computed: { transitionName() { return this.$route.meta.transition || 'default'; // 默认采用'default'作为名称 }, }, ``` 随后修改模板部分如下所示: ```html <transition :name="transitionName"> <router-view></router-view> </transition> ``` 此时可以根据每条路径单独设定其专属的元信息字段 `meta.transition` 值从而控制各自独特的视觉体验。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值