Использование перехода и анимации vue

Vue.js

Обзор:

Vue предоставляет несколько различных способов применения переходов при вставке, обновлении или удалении DOM.

Включает в себя следующие инструменты:

  • Автоматически применять классы в переходах и анимации CSS
  • Может использоваться со сторонними библиотеками анимации CSS, такими как Animate.css.
  • Напрямую манипулируйте DOM с помощью JavaScript в хуках перехода
  • Может использоваться со сторонними библиотеками анимации JavaScript, такими как Velocity.js.

Предисловие:

Анимация является неотъемлемой частью ежедневной разработки, которая не только делает прямое переключение элементов более естественным, но и значительно улучшает взаимодействие с пользователем.Поэтому она также обеспечивает очень сильную поддержку анимации в Vue.Vue не только поддерживает использование CSS для написания некоторые эффекты перехода также поддерживают JS, но в этой статье описывается, как использовать CSS для создания анимации перехода.

Имя класса перехода реализует анимацию:

Сначала кидаем картинку, украденную из официального документа:

Анимация входит:

  • v-enter: анимация перед входомисходныйусловие
  • v-enter-to: После запуска анимацииконецусловие
  • v-enter-active: период времени, когда анимация входит

PS: Первое и второе - это временные точки, третье - период времени.

Анимация прочь:

  • v-leave: до того, как анимация уйдетисходныйусловие
  • v-leave-to: после выхода анимацииконецусловие
  • v-leave-active: период времени, когда анимация уходит

PS: Первое и второе - это временные точки, третье - период времени. Примечание. В официальной документации концепции есть более конкретное объяснение.

Принцип реализации анимации перехода:

1.首先最基础的一点在于 如果你想要在单元素/单个组件之中实现过渡动画 那么 你需要在元素/组件所在的HTML标签之外包裹一层 <transition>标签,无论是过渡还是动画 都需要这个<transition>包起来。

2.当元素/组件被<transition>标签包裹了以后 那么Vue会自动的为我们构建一个动画流程 具体的流程会在下文提到 因此先记住这句话就行啦 也就是说 如果你在<style>标签中添加了一些样式的话Vue会自动的在某个时间节点给元素或者组件添加、删除对应的样式

3.上面提到了当元素/组件被<transition>标签包裹的时候Vue会自动的构建动画流程 也就是自动的在某个时间节点添加/删除对应的CSS类名 Vue其实提供了6个对应的类名 ,如上图所示。

В анимации могут быть некоторые абстракции, вот несколько картинок, которые помогут вам понять:

Мы предполагаем, что черная горизонтальная линия — это весь поток анимации, а красная точка — момент начала анимации:

Анимация входит:

1. Когда элемент обернут переходом, Vue автоматически проанализирует стиль CSS элемента и создаст процесс анимации. Затем, когда мы оборачиваем элемент/компонент тегом, Vue добавит два имени класса CSS v-enter/v-enter-to перед началом анимации.

3. Затем, когда анимация вот-вот будет выполнена: в div добавятся два класса, vv — v-enter и v-enter-active. Когда первый кадр анимации заканчивается и выполняется второй кадр: Vue прямо сейчас удалит класс v-enter, а затем добавит класс v-enter-to. Класс v-enter-active будет существовать на протяжении всего процесса анимации до конца анимации.

4. В последний момент выполнения анимации: Vue удалит v-enter-active и v-enter-to.

Выше мы говорили про анимацию элемента от скрытия до показа, теперь поговорим об анимации от показа до скрытия, которая похожа на картинку выше, но имя класса изменилось:

Анимация прочь:

1. Когда элемент обернут переходом, Vue автоматически проанализирует стиль CSS элемента и создаст процесс анимации. Затем, когда мы оборачиваем элемент/компонент тегом, Vue добавит два имени класса CSS v-leave/v-leave-to перед началом анимации.

3. Затем, когда анимация вот-вот будет выполнена, в div добавятся два класса, vv — это v-leave и v-leave-active. Когда заканчивается первый кадр анимации и выполняется второй кадр: Vue прямо сейчас удалит класс v-leave, а затем добавит класс v-leave-to. Класс v-leave-active будет существовать на протяжении всего процесса анимации до конца анимации.

4. В последний момент выполнения анимации: Vue удалит v-leave-active и v-leave-to.

Краткое описание анимации перехода:

Вывод 1. Таким образом, два класса fade-enter-active и fade-leave-active на самом деле проходят через всю анимацию, поэтому добавьте сюда анимацию перехода или свойства мониторинга. Остальные четыре свойства связаны с изменениями отслеживаемых свойств анимации, сделанными в определенный момент времени.

Вывод 2: состояния v-enter-to и v-leave одинаковы. И вообще говоря, состояния v-enter и v-leave-to тоже одинаковы. Итак, мы можем записать эти четыре состояния в виде двух групп.

То есть: анимация Vue достигается путем добавления классов, связанных с анимацией, к элементам в определенное время.

Небольшая демонстрация анимации перехода

Давайте реализуем несколько небольших демонстраций через имя класса перехода Vue:

<style>
  /* 盒子样式 */
       /* 盒子样式 */
        .box {
            width: 100px;
            height: 100px;
            background: red;
        }

        /* 第一个盒子的效果 */
        /* tran1-enter-active入场动画的时间段  tran1-leave-active离场动画的时间段 */
        .tran1-enter-active, .tran1-leave-active {
            transition: opacity 1s;/*期间,设置过渡的属性:all表示所有的属性、时间为1秒、过渡的状态*/
        }
        /* 显示前或隐藏后的效果 */
        /* tran1-enter 这是一个时间点,是进入之前元素的起始状态,此时还没有进入  */
        /* tran1-leave-to  是动画离开之后,离开的终止状态,此时元素动画已经结束 */
        .tran1-enter,.tran1-leave-to {
            opacity: 0; /* 都是隐藏效果 */
        }


         /* 第二个盒子的效果 */
        /* 显示过渡效果 */
        .tran2-enter-active {
            transition: all 1s ease;
        }
        /* 隐藏过渡效果 */
        .tran2-leave-active {
            transition: all 1s ease;
        }
        /* 显示前或隐藏后的效果 */
        .tran2-enter, .tran2-leave-to {
            opacity: 0;
            transform: translateX(10px);/* 水平方向右移10px  tran2-enter 一开始让DOM元素处于靠右10px的位置 */ 
        }
</style>
<body>
     <!-- 过渡效果和动画效果都需要用transition标签包住 -->
    <!-- transition 元素,是 Vue 官方提供的 -->
    <!-- 过渡效果 -->
    <div id="tran1">
        <button @click="show = !show">渐变过渡</button>
        <transition name="tran1" mode="">
            <div class="box" v-if = "show"></div>
        </transition>
    </div>
    <br>
    <div id="tran2">
        <button @click="show = !show">渐变平滑过渡</button>
        <transition name="tran2" mode="">
            <div class="box" v-if="show"></div>
        </transition>
    </div>
</body>

<script>
        let vm1 = new Vue({
            el: '#tran1',
            data: {
                show: true,
            }
        })
        let vm2 = new Vue({
            el: '#tran2',
            data: {
                show: true,
            }
        })
            </script>

Пользовательское имя класса перехода

То есть изменить префикс имени класса перехода

В предыдущем абзаце имена классов перехода .v-enter и .v-leave-to начинаются с v-. При этом существует ограничение: если предположить, что два элемента DOM обернуты переходами, то оба элемента DOM имеют анимацию, определенную в v-.

Так что, если мы хотим определить анимацию двух элементов DOM по отдельности? Здесь мы можем сделать это, изменив префикс имени класса перехода. Например:

1. Пользовательские псевдонимы

 <transition name="my">
      <h6 v-if="flag2">这是一个H6</h6>
    </transition>

В приведенном выше коде мы добавили name="my".

2. Используйте псевдонимы (мы можем использовать .my-enter, .my-leave-для этих имен классов)

  .my-enter,
    .my-leave-to {
      opacity: 0;
      transform: translateY(70px);
    }

CSS-анимация: библиотека Animate.css

2, библиотека Animate.css в Vue

<style>
        /* 动画效果 */
        .anim1-enter-active {
            animation: bounce-in 1s;
        }
        .anim1-leave-active {
            animation: bounce-in 3s reverse;
        }
        /* @keyframes自定义动画效果,然后可以被引用 */
        @keyframes bounce-in {
            /* 若总共持续1秒,则0%表示0秒,50%表示0.5秒,100%表示1秒 */
            0% { transform: scale(0); }
            50% { transform: scale(1.5); }
            100% { transform: scale(1); }
        }
</style>
<body>
            <!-- 动画效果 -->
    <div id="anim1">
        <button @click="show = !show">放大缩小动画</button>
        <br>
        <transition name='anim1'>
            <div class="box" v-if="show"></div>
        </transition>
    </div>
    </body>
<script>
            let vm3 = new Vue({
            el: '#anim1',
            data: {
                show: true,
            }
        })

</script>

2. После того, как у нас есть тег перехода, нужно ли нам использовать имя селектора, например, исчезать-входить-активно или исчезать-оставлять-активным? Нет, у нас по-прежнему есть следующий селектор, который можно использовать в нескольких местах: селектор имеет обычное имя, а такие атрибуты, как enter-active-class и leave-active-class, записываются в теге перехода.

        /* 动画效果2 */
        .active {  /* 正常命名*/
            animation: bounce-in 1s;
        }

        .leave {/* 正常命名*/
            animation: bounce-in 3s reverse;
        }

        /* @keyframes自定义动画效果,然后可以被引用 */
          @keyframes bounce-in {
            /* 若总共持续1秒,则0%表示0秒,50%表示0.5秒,100%表示1秒 */
            0% { transform: scale(0); }
            50% { transform: scale(1.5); }
            100% { transform: scale(1); }
        }

         <div id="anim1">
        <button @click="show = !show">放大缩小动画2</button>
        <br>
        <!--给transition添加enter-active-class和leave-active-class两个属性,并与CSS选择器绑定-->
        <transition enter-active-class="active" leave-active-class="leave">
            <div class="box" v-if="show"></div>
        </transition>
    </div>

Использование Animate.css

3. С помощью описанного выше метода привязки класса анимации к обычному стилю CSS в теге перехода мы можем использовать библиотеку Animate.css.Перейдите на официальный сайт, чтобы загрузить эту библиотеку, и мы можем напрямую использовать вышеуказанные эффекты анимации без пишем сами.. Официальный сайт:Но Eden.GitHub.IO/animate.CSS…

    <link rel="stylesheet" href="./am.css">

    <div id="anim1">
        <button @click="show = !show">放大缩小动画3</button>
        <br>
        <!--给transition添加enter-active-class和leave-active-class两个属性,并与CSS选择器绑定-->
        <transition enter-active-class="animated swing" leave-active-class="animated shake">
            <div class="box" v-if="show"></div>
        </transition>
    </div>

Примечания по использованию animate.css:

В приведенном выше коде мы используем классы bounceIn и bounceOut, предоставляемые animate.css, для анимации входа и выхода. Примечание 1. Два имени класса enter-active-class и leave-active-class являются ключевыми словами в анимации Vue и не могут быть записаны как имена классов, которые вы произвольно создаете.

Примечание 2: два класса bounceIn и bounceOut нельзя использовать напрямую, а анимированный класс следует добавить впереди, иначе анимация не сработает. Конечно, в приведенном выше коде мы также можем переместить код class=animated в тег h3, эффект тот же, а именно:

<transition enter-active-class="swing" leave-active-class=" shake" :duration="{ enter: 1000, leave: 300 }>
            <div class="box" v-if="show" class="animated"></div>
        </transition>

Если мы хотим установить продолжительность анимации входа и выхода, мы можем использовать для этого :duration.

Используйте :duration="значение в миллисекундах", чтобы единообразно установить продолжительность анимации для входа и выхода. Используйте :duration="{ введите: 1000, оставьте: 300}", чтобы установить продолжительность входа и продолжительность выхода соответственно.

Короче говоря, vue переходы и анимации, на официальном сайте много всего, я сначала напишу их здесь, а потом вернусь, чтобы продолжить обновление, когда будет время.

Справочная статья:

Ууху. Deeper.com/article/267…

woohoo.andposters.com/v UE-Animati…