Отключить анимацию перехода

Как в некоторых случаях отключить анимацию?

https://jsfiddle.net/4b3nxv7n/

<div id="flip-list-demo" class="demo" :class="{'animate': animate}">
  <button v-on:click="shuffle">Shuffle</button>
  <input type="checkbox" v-model="animate"/>
  <transition-group name="flip-list" tag="ul">
    <li v-for="item in items" v-bind:key="item">
      {{ item }}
    </li>
  </transition-group>
</div>

new Vue({
  el: '#flip-list-demo',
  data: {
    animate: true,
    items: [1,2,3,4,5,6,7,8,9]
  },
  methods: {
    shuffle: function () {
      this.items = _.shuffle(this.items)
    }
  }
})

.animate .flip-list-move {
  transition: transform 1s;
}

Вот пример модифицированной группы переходов с флажком для переключения анимации. Я использую класс css для отключения анимации, когда это необходимо. Обычно это работает нормально, но есть ошибка: если вы снимите флажок, затем нажмите «Перемешать», а затем снова установите флажок, анимация по-прежнему не работает. Насколько я могу судить при использовании инструментов разработчика Chrome, в этом случае классы перехода к элементам не применяются.

Другой способ решить эту проблему - изменить свойство имени перехода. Но у меня такой же баг. https://jsfiddle.net/61vLtaxn/

<div id="flip-list-demo" class="demo">
  <button v-on:click="shuffle">Shuffle</button>
  <input type="checkbox" v-model="animate"/>
  <transition-group :name="transitionName" tag="ul">
    <li v-for="item in items" v-bind:key="item">
      {{ item }}
    </li>
  </transition-group>
</div>
new Vue({
  el: '#flip-list-demo',
  data: {
    animate: true,
    items: [1,2,3,4,5,6,7,8,9]
  },
  computed: {
    transitionName: function () {
        return this.animate ? 'flip-list' : 'disabled-list'
    }
  },
  methods: {
    shuffle: function () {
      this.items = _.shuffle(this.items)
    }
  }
})
.flip-list-move {
  transition: transform 1s;
}

Я что-то не так понимаю в переходе или это ошибка vue?


person Grigory    schedule 30.06.2017    source источник
comment
У меня работает на Mac / Chrome   -  person Roy J    schedule 30.06.2017
comment
@RoyJ у меня не работает на Mac / Chrome. Обязательно запустите скрипку и следуйте инструкциям по воспроизведению, прежде чем делать что-либо еще (сначала это меня достало). Григорий, я думаю это баг   -  person thanksd    schedule 30.06.2017
comment
Вы правы: я перетасовал, прежде чем снять галочку. Если вы сначала перемешаете, вы можете установить и снять флажок, и перемешивание будет работать должным образом. Если вы снимите флажок перед перетасовкой, переход не произойдет.   -  person Roy J    schedule 30.06.2017


Ответы (1)


Это ошибка, о которой сообщалось на их GitHub.

Обходной путь, который они предложили, заключался в добавлении атрибута key к transition-group:

<transition-group :name="transitionName" :key="transitionName" tag="ul">

Вот скрипка


Обходной путь, который я нашел, заключался в явном добавлении класса disabled-list-move (во второй пример) с почти мгновенным быстрым переходом (transition: transform 0s вызывал ту же проблему):

.flip-list-move {
  transition: transform 1s;
}

.disabled-list-move {
  transition: transform 0.0000000001s;
}

Вот скрипка

person thanksd    schedule 30.06.2017
comment
Я не могу сказать, связано ли это, но использование @enter с тегом transition-group в этом примере не работает. В документации рекомендуется. - person Roy J; 30.06.2017
comment
@Grigory об ошибке сообщалось, и в настоящее время она исправляется, но пока что они предложили обходной путь. Смотрите мое редактирование - person thanksd; 03.07.2017
comment
Разве его нельзя вызывать в случайном порядке? - person Roy J; 03.07.2017
comment
@RoyJ, я так понимаю. Enter просто вызывается при добавлении элемента. - person thanksd; 03.07.2017
comment
Вы сэкономили мне время. Отличное спасибо - person marlonjd; 09.04.2021