vue动画

document.customMenu:在document对象上挂一个属性:customMenu。

进入/离开 & 列表过渡

vue 在插入、更新或者移除DOM时,提供多种不同方式的应用过渡效果。

  • 在 CSS 过渡和动画中自动应用 class
  • 可以配合使用第三方 CSS 动画库,如 Animate.css
  • 在过渡钩子函数中使用 JavaScript 直接操作 DOM
  • 可以配合使用第三方 JavaScript 动画库,如 Velocity.js
单元素/组件的过渡

vue提供了 transition 的封装组件,在下列情形中,可以给任何元素和-组件添加 entering/leaving 过渡。

- 条件渲染 (使用 v-if)
- 条件展示 (使用 v-show)
- 动态组件
- 组件根节点</br>

注意:
- 组件更新一定会引起组件的DOM更新;
- 组件更新是由组件本身的某些属性发生变化引起的,如上述四种情况都是会引起组件更新,从而会有动画;
- 组件内容发生变化,组件不会有过渡动画。因为组件内容是组件的子集,不是组件本身。

  • css过渡

    <code>
        <style media="screen">
            .miaov-a-active {
                position: absolute;
                transition: all 1s
            }
            .miaov-enter {
                left: 100px;
            }
            .miaov-enter-to {
                left: 0px;
            }
    
            .miaov-leave-active {
                transition: all 2s
            }
            .miaov-leave {
                opacity: 1;
            }
            .miaov-leave-to {
                opacity: 0;
            }
    
        </style>
        <script src="../js/vue.js" charset="utf-8"></script>
    </head>
    <body>      
        <div id="app">
            <button @click="show = !show">按钮</button>
            <transition name="miaov">
                <p v-show="show">内容</p>
            </transition>
        </div>
    
        <script type="text/javascript">
    
            new Vue({
                el: '#app',
                data: {
                    show: false
                }
            })
    
        </script>
    </code>
    
  • JavaScript 钩子

    <code>
        <div id="app">
            <button @click="show = !show">按钮</button>
    
            <transition
                @before-enter="beforeEnter"
                @enter="enter"
            >
                <p v-show="show">内容</p>
            </transition>
        </div>
    
        <script type="text/javascript">
    
            new Vue({
                el: '#app',
                data: {
                    show: false
                },
                methods: {
                    beforeEnter(el) {
                        $(el).css({opacity: 0})
                    },
                    enter(el) {
                        console.log(el);
                        $(el).animate({
                            opacity: 1
                        }, 1000);
                    }
                }
            })  
        </script>
    </code>
    
动态组件添加动画
  • 动态组件

    • 通过使用保留的 元素,动态地绑定到它的 is 特性,我们让多个组件可以使用同一个挂载点,并动态切换。
    • keep-alive
      如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个 keep-alive 指令参数:








      -添加动画

      <code>
          <style media="screen">
              .miaov-enter-active {
                  position: absolute;
                  transition: all 1s
              }
              .miaov-enter {
                  left: 100px;
              }
              .miaov-enter-to {
                  left: 0px;
              }
      
              .miaov-leave-active {
                  transition: all 2s
              }
              .miaov-leave {
                  opacity: 1;
              }
              .miaov-leave-to {
                  opacity: 0;
              }
          </style>
      </head>
      <body>  
          <div id="app">
              <button @click="currentView='home'">home</button>
              <button @click="currentView='list'">list</button>
              <button @click="currentView='about'">about</button>
              <keep-alive>
                  <transition name="miaov">
                      <component v-bind:is="currentView">
                          <!-- 组件在 vm.currentview 变化时改变! -->
                      </component>
                  </transition>
              </keep-alive>
          </div>
          <script type="text/javascript">
      
              new Vue({
                  el: '#app',
                  data: {
                      currentView: 'home'
                  },
                  components: {
                      home: {
                          template: '<h1>home</h1>',
                          destroyed() {
                              console.log('home destroyed');
                          },
                          activated() {
                              console.log('home activated');
                          },
                          deactivated() {
                              console.log('home deactivated');
                          }
                      },
                      list: {
                          template: '<h1>list</h1>',
                          activated() {
                              console.log('list activated');
                          },
                          deactivated() {
                              console.log('list deactivated');
                          }
                      },
                      about: {
                          template: '<h1>about</h1>'
                      }
                  }
              })
      
          </script>
      </code>
      

      注意:这里涉及到生命周期中的两个钩子函数:

    • 1.activated:keep-alive 组件激活时调用。
    • 2.deactivated:keep-alive 组件停用时调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值