当前位置:首页 > VUE

vue实现半场动画

2026-02-18 05:32:54VUE

Vue 实现半场动画的方法

在 Vue 中实现半场动画(即动画只执行到一半或特定状态后停止)可以通过以下几种方式实现:

使用 CSS 动画配合 Vue 的过渡类名

通过 Vue 的 <transition> 组件结合 CSS 动画,可以控制动画的播放进度。例如,通过 animation-iteration-countanimation-fill-mode 控制动画停止在中间状态。

<transition name="half-animation">
  <div v-if="show">内容</div>
</transition>
.half-animation-enter-active {
  animation: slide-in 0.5s;
  animation-fill-mode: forwards;
}

@keyframes slide-in {
  0% { transform: translateX(-100%); }
  50% { transform: translateX(0); }
  100% { transform: translateX(100%); }
}

通过调整 @keyframes 的百分比或 animation-fill-mode,可以让动画停在中间状态。

使用 JavaScript 动画库(如 GSAP)

GSAP 提供了更精细的动画控制,可以精确指定动画的进度或停止位置。

<template>
  <div ref="box" class="box"></div>
</template>

<script>
import { gsap } from 'gsap';

export default {
  mounted() {
    gsap.to(this.$refs.box, {
      x: 100,
      duration: 1,
      onComplete: () => {
        // 动画完成后可以手动调整到中间状态
        gsap.set(this.$refs.box, { x: 50 });
      }
    });
  }
};
</script>

使用 Vue 的过渡钩子

通过 Vue 的过渡钩子(如 @before-enter@enter),可以在动画执行过程中手动控制动画进度。

<transition
  @before-enter="beforeEnter"
  @enter="enter"
  v-bind:css="false"
>
  <div v-if="show">内容</div>
</transition>
methods: {
  beforeEnter(el) {
    el.style.opacity = 0;
  },
  enter(el, done) {
    const animation = el.animate(
      [
        { opacity: 0, transform: 'translateX(-100%)' },
        { opacity: 1, transform: 'translateX(0)' }
      ],
      { duration: 1000 }
    );
    animation.onfinish = () => {
      // 手动停止在中间状态
      el.style.transform = 'translateX(-50%)';
      done();
    };
  }
}

使用动态样式绑定

通过 Vue 的动态样式绑定,可以手动控制动画的进度。

vue实现半场动画

<template>
  <div :style="animationStyle" class="box"></div>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    };
  },
  computed: {
    animationStyle() {
      return {
        transform: `translateX(${this.progress * 50}%)`
      };
    }
  },
  mounted() {
    // 手动控制动画进度
    const interval = setInterval(() => {
      this.progress += 0.1;
      if (this.progress >= 0.5) {
        clearInterval(interval);
      }
    }, 100);
  }
};
</script>

注意事项

  • CSS 动画的 animation-fill-mode 可以设置为 forwards 保留最后一帧状态。
  • JavaScript 动画库(如 GSAP)提供了更灵活的控制方式,适合复杂动画场景。
  • 动态样式绑定适合需要手动控制动画进度的场景,但需要自行管理动画逻辑。

标签: 半场动画
分享给朋友:

相关文章

vue2.0 实现动画

vue2.0 实现动画

Vue 2.0 实现动画的方法 Vue 2.0 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的实现方式: 使用 Vue 内置过渡系统 Vue 提供了…

vue动画实现标签页

vue动画实现标签页

vue动画实现标签页的方法 在Vue中实现带有动画效果的标签页,可以通过内置的<transition>或<transition-group>组件结合CSS过渡或JavaScri…

vue 实现tab过度动画

vue 实现tab过度动画

Vue 实现 Tab 过渡动画 在 Vue 中实现 Tab 过渡动画可以通过 <transition> 或 <transition-group> 组件结合 CSS 过渡或动画实…

vue实现页面载入动画

vue实现页面载入动画

Vue 实现页面载入动画的方法 使用 CSS 动画和 Vue 生命周期钩子 在 Vue 组件的 mounted 或 created 钩子中触发动画效果,结合 CSS 动画或过渡实现平滑的载入效果。C…

冒泡排序动画vue实现

冒泡排序动画vue实现

冒泡排序动画的 Vue 实现 冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换顺序错误的元素。在 Vue 中实现冒泡排序动画可以通过数据绑定和过渡效果直观展示排序过程。 核心实现步…

vue实现资源加载动画

vue实现资源加载动画

实现资源加载动画的方法 在Vue中实现资源加载动画可以通过多种方式完成,以下是几种常见的方法: 使用CSS动画和Vue条件渲染 通过Vue的v-if或v-show指令控制加载动画的显示与隐藏。结合…