使用vue.js更新值时如何添加CSS动画?

Jam*_*mes 20 vue.js vuejs2

我正在使用vue.js将数组渲染到列表中.

列表中的每个项目都有一个数值,当该值发生变化时,我想使用动画.

动画示例:

  • 现有价值淡出,新价值逐渐消失.
  • 在淡出的价值后面的黄色背景.
  • 文本颜色更改然后淡化回原始颜色.

我怎样才能做到这一点?

HTML

<div id="app">
  <ul>
    <li v-for="user in users">
      {{ user.name }} = {{ user.value }}
    </li>
  </ul>

  <button v-on:click="users[0].value++">Change value</button>
</div>
Run Code Online (Sandbox Code Playgroud)

JS

var app = new Vue({
  el: '#app',
  data:
  {
    users:
    [
      { name: 'Barbara Dwyer', value: 14 },
      { name: 'William B Hardigan', value: 10 }
    ]
  }
})
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/anon/pen/ryxjOE

Bil*_*ell 42

你想:key和a一起使用<transition>.这是一个非常基本的演示.

<transition name="slide-fade" mode="out-in">
  <div :key="value">
    {{ value }}
  </div>
</transition>
Run Code Online (Sandbox Code Playgroud)

然后,作为value更改,slide-fade将使用动画.具有旧值的元素将使用leave动画,具有新值的元素将使用enter动画.

这是一个快速演示:https://jsfiddle.net/jx52bfpc/2/

  • 这个答案的关键部分是必须获得Vuejs才能创建新元素-没有新元素就不能拥有动画。`:key =“ value”`通过直接将`div`绑定到值上来在“值”更改时强制创建新的`div`。 (3认同)
  • 请注意,这里的要点是@James正确指出的`:key =“ value`;我强调这一点是因为即使我尝试了一下但仍然没有用,我还是检查了[vue docs](https ://vuejs.org/v2/guide/transitions.html#ad),相关部分说它仅支持“条件渲染(使用v-if)”和“条件显示(使用v-show)”,我只是将其归零我认为这根本行不通(就像vue文档一样棒,我发现该部分有些混乱,因为动画也发生在“值更改”上)。 (2认同)

rai*_*tin 8

您可以使用标准 css 动画,其键取决于更改的值。通过这种方式,新元素将开始新的动画,而前一个动画将被丢弃。

new Vue({
  data: {
    value: 5,
  },
  methods: {
    add() {
      this.value++
    },
    subtract() {
      this.value--
    },
    keep() {
      this.value=this.value
    },
  },
}).$mount('#app')
Run Code Online (Sandbox Code Playgroud)
.mycolor {
  background-color: green;
  animation: mymove 5s;
}
@keyframes mymove {
  from {
    background-color: red;
  }
  to {
    background-color: yellow;
  }
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <div class="mycolor" :key="value">
    {{ value }}
  </div>
  <button @click="add">
   Add
  </button>
  <button @click="subtract">
   Subtract
  </button>
  <button @click="keep">
   Keep
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)