javascript - Vue转场使用不当?

标签 javascript vue.js vuejs2 transition

我有一个元素通过每 3 秒换出 imgsrc 来充当图像轮播:

JS

data() {

 return {

  carousel: {

    images: [
      "/images/beauty.png",
      "/images/dance.png",
      "/images/funny.png",
      "/images/sweet.png"
    ],
    currentNumber: 0,
    timer: null 
  }   
 } 
}

methods: {
  startRotation: function() {
    this.carousel.timer = setInterval(this.next, 3000);
  },
  next: function() {
    this.carousel.currentNumber += 1
  }
}

标记

<div class="grid__slide">
  <div class="grid__slide-inner" v-for="number in [carousel.currentNumber]">
    <transition
      name="ease-out-transition"
      leave-active-class="fadeOut"
      mode="out-in"
      >
      <img :src="carousel.images[Math.abs(carousel.currentNumber) % carousel.images.length]">
    </transition>
  </div>
</div>

CSS

@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

.fadeOut {
  -webkit-animation-name: fadeOut;
  animation-name: fadeOut;
    -webkit-animation-duration: 500ms;
    animation-duration: 500ms;
    -webkit-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
    animation-iteration-count: 1;
    animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);
}

img 元素的转换外,其他所有功能均正常运行。关于为什么它无效的任何建议?

最佳答案

如章节 "Transitioning Between Elements" in the documentation about <transition> 中所述, 你需要添加一个 :key 尝试在同一类型的多个元素之间转换时的元素。

<img
    :src="carousel.images[Math.abs(carousel.currentNumber) % carousel.images.length]"
    :key="Math.abs(carousel.currentNumber) % carousel.images.length"
>

之所以需要这个是因为没有 key属性,Vue 尝试优化应用程序的速度,而不是交换图像元素,它只是更改 src属性指向您的新图像。

关于javascript - Vue转场使用不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046000/

相关文章:

vue.js - 用 jest : $route is always undefined 进行 Vue 测试

typescript - 如何获取复杂类型以在 vue.js 模块中初始化和声明数据

javascript - 为什么 DOM 既有 window 又有 self?

javascript - HTML加载后调用函数AngularJS

javascript - 如何用纯javascript创建和写入临时文件?

vue.js - vue-router 2,如何通过ajax获取路由?

vue.js - Vue-Router:无法读取未定义的属性 '$route' - VueJS

javascript - 为什么这个javascript不正确?

javascript - v-model 更改时 watch 不触发

javascript - 无法获取 api 数据并使用 vuex 存储 - vue.js