Home  >  Article  >  Web Front-end  >  How to implement transition and animation effects in Vue

How to implement transition and animation effects in Vue

PHPz
PHPzOriginal
2023-06-11 17:06:091577browse

Vue.js is one of the most popular front-end frameworks currently. When building a user interface, in addition to considering issues such as functionality and layout, you also need to consider how to provide users with a better user experience. Among them, transition and animation effects are a very important part. This article will introduce how to implement transition and animation effects in Vue.js, allowing you to use these effects in your projects more flexibly.

Transitions and animations in Vue.js

Vue.js provides a set of convenient and easy-to-use transition and animation APIs, allowing developers to easily implement various effects in applications , such as basic effects such as fade in and fade out, displacement, scaling, rotation, etc., and more advanced effects can also be customized. Transitions and animations in Vue.js can be applied in the following aspects:

  • can act on the entry and exit transition effects of components;
  • can act on the transition state effects of components ;
  • Can be applied to animation effects on elements, implemented through the addTransitionClass and removeTransitionClass methods.

Next, we will explain these aspects in detail.

The entry and exit transition effects of components

The entry and exit transition effects of components refer to the visual effects produced by components during the loading and unloading process of the page, also known as entry animation and Appearance animation. Vue.js provides the transition component to simplify this process. The specific implementation method is as follows:

<template>
  <transition name="fade">
    <div v-if="show">Hello World!</div>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

<script>
export default {
  data() {
    return {
      show: false
    }
  }
}
</script>

In the code, we use a transition component named fade to wrap a div element, and use the v-if directive on this div element to determine its display and Hidden state. We also need to add two classes, .fade-enter-active and .fade-leave-active, to the style to define the duration and type of the transition effect. At the same time, you also need to add the .fade-enter and .fade-leave-to classes to define the initial state and end state of the component.

When the value of show changes from false to true, the fade-enter and fade-enter-active classes will be added to the div element, thus triggering the transition effect. On the contrary, when the show state changes to false, the fade-leave and fade-leave-active classes will be added to the div element, thus triggering the leave transition effect.

Three keyframes will occur during the transition process, which are:

  • Before the transition starts, that is, neither fade-enter nor fade-enter-active is added to the element.
  • When the transition is in progress, fade-enter is added to the element, fade-enter-active is also added to the element, and the animation effect is displayed.
  • When the transition is completed, that is, fade-enter is removed and fade-enter-active is also removed. At this time, fade-leave is also added to the element, fade-leave-active is also added, and the animation effect is displayed.

The above implementation method is a simple fade-in and fade-out effect. If you need to achieve other transition effects, you can achieve it by modifying the styles of .fade-enter and .fade-leave-to.

Transition state effects of components

In addition to entering and leaving transition effects, transition state effects can also be defined for components. For example, when the component is displayed and the mouse is hovering over the component, we want the component to have a flickering effect, which can be achieved by defining a transition state effect. The specific implementation code is as follows:

<template>
  <div class="container" @mouseover="startBlink" @mouseleave="stopBlink">
    <transition :name="transitionName">
      <div class="box" :class="{'blink': isBlink}"></div>
    </transition>
  </div>
</template>

<style>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 200px;
}
.box {
  width: 200px;
  height: 200px;
  background-color: #ff0000;
  transition: background-color 1s ease-in-out;
}
.blink {
  animation: blink 1s infinite;
}
@keyframes blink {
  0% {
    background-color: #ff0000;
  }
  50% {
    background-color: #ffff00;
  }
  100% {
    background-color: #ff0000;
  }
}
</style>

<script>
export default {
  data() {
    return {
      isBlink: false,
      transitionName: 'fade'
    }
  },
  methods: {
    startBlink() {
      this.isBlink = true
    },
    stopBlink() {
      this.isBlink = false
    }
  }
}
</script>

In the above code, we use the transition component, but the name attribute value of the transition component is bound to the variable transitionName. The isBlink variable determines the component's blinking state. At the same time, we added a blink class to the box, and the usage status of the blink class is determined by the isBlink variable. Finally, we implemented the blinking effect by using CSS3 animations.

Animation effects on elements

In addition to being able to apply transitions and animations on components, Vue.js can also apply animation effects to any element through the addTransitionClass and removeTransitionClass methods. Here we will use a simple example to demonstrate the implementation of this method.

<template>
  <div class="container">
    <button @click="animate">Animate</button>
    <div class="box" :class="{'animated': animation}" ref="box"></div>
  </div>
</template>

<style>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 200px;
}
.box {
  width: 100px;
  height: 100px;
  background-color: #ff0000;
}
.animated {
  animation: bounce 1s;
}
@keyframes bounce {
  0% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-50px);
  }
  100% {
    transform: translateY(0);
  }
}
</style>

<script>
export default {
  data() {
    return {
      animation: false
    }
  },
  methods: {
    animate() {
      this.animation = true
      this.$nextTick(() => {
        this.$refs.box.classList.add('animated')
        this.$refs.box.addEventListener('animationend', () => {
          this.animation = false
          this.$refs.box.classList.remove('animated')
        })
      })
    }
  }
}
</script>

In the above code, we added a click event to a button and triggered the animation effect in the click event. Animation effects are achieved by adding animated classes to elements, and we add and remove animated classes through the addTransitionClass and removeTransitionClass methods. When the animation ends, we need to manually remove the animated class.

Summary

Vue.js provides a set of convenient and easy-to-use transition and animation APIs. Developers can easily use these effects to improve the user experience of the application. This article introduces how to implement transition and animation effects in Vue.js, including component entry and exit transition effects, component transition state effects, and animation effects on elements. When implementing these effects, you need to master some basic CSS3 skills, which is a prerequisite for better use of transitions and animation effects.

The above is the detailed content of How to implement transition and animation effects in Vue. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn