0

I want to add transition when the values get changes but cannot accomplish it. I need to change the background when the values get updated.

Can anyone help me out?

Codesandbox Link - Vuejs Transition

<template>
  <div id="app">
    <div class="box">
      <div v-if="change > 0">
        <transition name="increase">
          <span>+ {{ amount }} </span></transition
        >
      </div>
      <div v-else-if="change < 0">
        <transition name="decrease">
          <span>- {{ amount }}</span>
        </transition>
      </div>
      <div v-else>{{ amount }}</div>
    </div>
    <br />
    <button @click="generate">Update</button>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      change: 2,
      amount: 100,
    };
  },
  methods: {
    generate() {
      var amounts = [100, 110, 85, 75, 190];
      let changes = [-1.2, -5, 2, 5, 1, 7];
      this.amount = amounts[Math.floor(Math.random() * amounts.length)];
      this.change = changes[Math.floor(Math.random() * changes.length)];
    },
  },
  created() {},
};
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.box {
  width: 100px;
  margin: 0 auto;
  border: 1px solid #ddd;
  padding: 1em 2em;
}
@keyframes higher {
  50% {
    background: rgba(50, 199, 135, 0.2);
    color: #32c787;
  }
}
@keyframes lower {
  50% {
    background: rgba(255, 86, 82, 0.2);
    color: #ff5652;
  }
}
.increase-enter {
  animation: higher 0.5s;
}
.decrease-enter {
  animation: lower 0.5s;
}
</style>

P.S - Ignore this, posted because my text is too short. IT is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

1 Answer 1

1

You can make use of key to inform transition there is a difference of the element so it can trigger the animation again.

Also, use the -active class to apply animation during entering phase.

https://codesandbox.io/s/transition-forked-vg5pu?file=/src/App.vue

<transition name="increase">
    <span :key="amount + change">+ {{ amount }}</span>
</transition>

...

.increase-enter-active {
  animation: higher 0.5s;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.