Образование

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

  1. Переход и анимация
  2. Директивы
  3. Маршрутизация

1. Переход и анимация

Переход

В VueJS доступны различные методы для реализации переходов для элементов HTML при их добавлении/обновлении в DOM. Переходы в VueJS — это встроенные компоненты, которые необходимо обернуть вокруг элементов, для которых они требуются.

Syntax:
<transition name = "nameoftransition">
   <div></div>
</transition>

В качестве примера давайте посмотрим, как работает переход.

Example:
<html>
   <head>
      <title>VueJs Instance</title>
      <script type = "text/javascript" src = "js/vue.js"></script>
   </head>
   <body>
      <style>
         .fade-enter-active, .fade-leave-active {
            transition: opacity 2s
         }
         .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
            opacity: 0
         }
      </style>
      <div id = "databinding">
         <button v-on:click = "show = !show">Click Here</button>
         <transition name = "fade">
            <p v-show = "show" v-bind:style = "styleobj">Animation Example</p>
         </transition>
      </div>
      <script type = "text/javascript">
         var vm = new Vue({
            el: '#databinding',
            data: {
               show:true,
               styleobj :{
                  fontSize:'30px',
                  color:'red'
               }
            },
            methods : {
            }
         });
      </script>
   </body>
</html>

С помощью кнопки clickhere мы можем изменить значение переменной show с true на false и наоборот. В теге p текстовый элемент появляется только в том случае, если переменная имеет значение true. Как показано в следующем коде, мы обернули тег p элементом перехода.

<transition name = "fade">
   <p v-show = "show" v-bind:style = "styleobj">Animation Example</p>
</transition>

Название перехода - затухание. VueJS предоставляет несколько стандартных классов для переходов, перед которыми стоит имя перехода.

Ниже приведены некоторые стандартные классы для перехода:

  • V-enter — этот класс вызывается в начальной ситуации перед обновлением/добавлением элемента. Это начальное состояние.
  • v-enter-active — определяет задержку, продолжительность и кривую ослабления для входа в фазу перехода. В течение всей фазы ввода класс находится в активном состоянии.
  • v-leave — добавляется, когда запускается переход на выход, после чего удаляется.
  • V-leave-active —используется на этапе выхода. удаляется по завершении перехода. На этапе выхода этот класс используется для применения задержки, длительности и кривой ослабления.

Имена каждого из вышеперечисленных классов будут начинаться с имени перехода. Видя, что переход исчезает, классы теперь .fade_enter, .fade_enter_active, .fade_leave, .fade_leave_active.

Они определены в следующем коде.

<style>
   .fade-enter-active, .fade-leave-active {
      transition: opacity 2s
   }
   .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
      opacity: 0
   }
</style>

В начале и в конце перехода .fade_enter_active и .fade_leave_active определяются вместе. Через 2 секунды непрозрачность устанавливается на 0.

Продолжительность определяется .fade_enter_active и .fade_leave_active. Заключительный этап определяется .fade_enter, .fade_leave_to.

Ниже показано отображение в браузере.

Нажатие кнопки приведет к исчезновению текста через две секунды.

Текст полностью исчезнет через две секунды. Рассмотрим другой пример, в котором нажатие кнопки смещает изображение по оси x.

Example:
<html>
   <head>
      <title>VueJs Instance</title>
      <script type = "text/javascript" src = "js/vue.js"></script>
   </head>
   <body>
      <style>
         .shiftx-enter-active, .shiftx-leave-active {
            transition: all 2s ease-in-out;
         }
         .shiftx-enter, .shiftx-leave-to /* .fade-leave-active below version 2.1.8 */ {
            transform :  translateX(100px);
         }
      </style>
      <div id = "databinding">
         <button v-on:click = "show = !show">Click Here</button>
         <transition name = "shiftx">
            <p v-show = "show">
               <img src = "images/img.jpg" style = "width:100px;height:100px;" />
            </p>
         </transition>
      </div>
      <script type = "text/javascript">
         var vm = new Vue({
            el: '#databinding',
            data: {
               show:true
            },
            methods : {
            }
         });
      </script>
   </body>
</html>

Используя следующий код, свойство преобразования используется для смещения изображения по оси X на 100 пикселей.

<style>
   .shiftx-enter-active, .shiftx-leave-active {
      transition: all 2s ease-in-out;
   }
   .shiftx-enter, .shiftx-leave-to /* .fade-leave-active below version 2.1.8 */ {
      transform :  translateX(100px);
   }
</style>

Ниже приведен вывод.

При нажатии на кнопку изображение сместится на 100 пикселей вправо, как показано на следующем снимке экрана.

Анимация

Эффект анимации такой же, как у переходов, но у анимации также есть классы, которые необходимо объявить, чтобы они работали.

Давайте посмотрим на пример, чтобы увидеть, как работает анимация.

Example:
<html>
   <head>
      <title>VueJs Instance</title>
      <script type = "text/javascript" src = "js/vue.js"></script>
   </head>
   <body>
      <style>
         .shiftx-enter-active {
            animation: shift-in 2s;
         }
         .shiftx-leave-active {
            animation: shift-in 2s reverse;
         }
         @keyframes shift-in {
            0%   {transform:rotateX(0deg);}
            25%  {transform:rotateX(90deg);}
            50%  {transform:rotateX(120deg);}
            75%  {transform:rotateX(180deg);}
            100% {transform:rotateX(360deg);}
         }
      </style>
      <div id = "databinding">
         <button v-on:click = "show = !show">Click Here</button>
         <transition name = "shiftx">
            <p v-show = "show">
               <img src = "images/img.jpg" style = "width:100px;height:100px;" />
            </p>
         </transition>
      </div>
      <script type = "text/javascript">
         var vm = new Vue({
            el: '#databinding',
            data: {
               show:true
            },
            methods : {
            }
         });
      </script>
   </body>
</html>

Как и в случае с переходами, существуют классы для применения анимации. Как показано в следующем коде, внутри тега p заключено изображение.

<transition name = "shiftx">
   <p v-show = "show"><img src = "images/img.jpg" style = "width:100px;height:100px;" /></p>
</transition>

Shiftx — это имя перехода. Он реализован с помощью следующего класса:

<style>
   .shiftx-enter-active {
      animation: shift-in 2s;
   }
   .shiftx-leave-active {
      animation: shift-in 2s reverse;
   }
   @keyframes shift-in {
      0%   {transform:rotateX(0deg);}
      25%  {transform:rotateX(90deg);}
      50%  {transform:rotateX(120deg);}
      75%  {transform:rotateX(180deg);}
      100% {transform:rotateX(360deg);}
   }
</style>

Классы имеют префикс с именами переходов, например, shiftx-enter-active и .shiftx-leave-active. Ключевые кадры анимации находятся в диапазоне от 0% до 100%. Следующий код показывает преобразование в каждом ключевом кадре.

@keyframes shift-in {
   0%   {transform:rotateX(0deg);}
   25%  {transform:rotateX(90deg);}
   50%  {transform:rotateX(120deg);}
   75%  {transform:rotateX(180deg);}
   100% {transform:rotateX(360deg);}
}

Ниже приведен вывод.

При нажатии кнопки она поворачивается от 0 до 360 градусов и исчезает.

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

Элемент перехода в VueJS поддерживает список пользовательских классов, которые можно добавить в качестве атрибутов.

  • войти в класс
  • введите активный класс
  • выпускной класс
  • покинуть активный класс

Когда мы хотим использовать внешнюю библиотеку CSS, такую ​​как animate.css, в игру вступают пользовательские классы.

Example:
<html>
   <head>
      <link href = "https://cdn.jsdelivr.net/npm/[email protected]" rel = "stylesheet" type = "text/css">
      <script type = "text/javascript" src = "js/vue.js"></script>
   </head>
   <body>
      <div id = "animate" style = "text-align:center">
         <button @click = "show = !show"><span style = "font-size:25px;">Animate</span></button>
         <transition
            name = "custom-classes-transition"
            enter-active-class = "animated swing"
            leave-active-class = "animated bounceIn">
            <p v-if = "show"><span style = "font-size:25px;">Example</span></p>
         </transition>
      </div>
      <script type = "text/javascript">
         var vm =  new Vue({
            el: '#animate',
            data: {
               show: true
            }
         });
      </script>
   </body>
</html>

Вывод:

Приведенный выше код применяет две анимации. Класс enter-active соответствует «анимированному качанию», а другой класс leave-active соответствует «анимированному bounceIn».Мы используем пользовательские классы анимации, чтобы применить анимацию из сторонней библиотеки.

Явная продолжительность перехода

Мы можем применять переходы и анимацию к элементу с помощью VueJS. Vue ожидает событий transionend и animationend, чтобы определить, закончилась ли анимация или переход.

Чтобы узнать больше о публикациях и узнать, смотрите эту статью.