Vue的动画封装

问题:如果在slot标签上使用v-show,程序功能是无法实现的,必须改成v-if。

原因:slot实际是一个抽象元素,有点类似template,本质并不是一个元素。

而v-show是通过控制元素的display来进行显示和隐藏的,slot本身不是元素,所以压根就不会有display这个css属性

所以,slot显示隐藏,要使用v-if。

css动画在<style>中定义,js动画在@before-enter="handleBeforEnter"中定义

步骤:

1.定义一个名为fade 的组件,然后在加上transition模板,并在此模板中加入slot插槽,slot中v-if绑定“show”属性,它的显示与否取决于父组件fade传进来的show的变量是否是show

2.当使用的时候只需要在dom元素上包裹一层fade组件,并在fade组件上绑定show属性,令其等于子组件中v-if绑定的show内容。

3.推荐动画使用js动画而不是css动画,从而使所有动画代码封装在一个组件里。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue的动画封装</title>
<script src="./vue.js"></script>
</head>
<body>
  <div id="root">

    <fade :show="show">
      <div>hello world
      </div>
    </fade>
     <fade :show="show">
      <h1>hello world
      </h1>
    </fade>
    <button @click="handleBtnClick">toggle</button>
   </div>
   <script>
    Vue.component(‘fade‘,{
      props:[‘show‘],
      template:`
      <transition @befor-enter="handleBeforeEnter"
       @enter="handleEnter">
       <slot v-if="show"></slot>
       </transition>`,
       methods:{
        handleBeforeEnter:function(el){
          el.style.color=‘red‘
        },
        handleEnter:function(el,done){
          setTimeout(()=>{
            el.style.color=‘green‘
            done()
          },4000)

        }
       }

    })

    var vm=new Vue({
      el:‘#root‘,
      data:{
      show:false
      },
      methods:{
       handleBtnClick:function(){
        this.show=!this.show
       }
      }
    })
   </script>
</body>
</html>

原文地址:https://www.cnblogs.com/tengteng0520/p/12076839.html

时间: 2024-10-10 01:45:13

Vue的动画封装的相关文章

iOS_SN_push/pop转场动画封装和一般动画封装

封装类中的方法: 1 #import <Foundation/Foundation.h> 2 3 #import <UIKit/UIKit.h> 4 5 6 7 8 9 @interface AnimationEffect : NSObject 10 11 12 13 14 15 /** 16 17 * push/pop转场动画封装 18 19 * 20 21 * @param type 动画类型 22 23 * @param subType 动画子类型 24 25 * @para

vue的动画组件(transition)

当插入或删除包含在 transition 组件中的元素时,Vue 将会做以下处理: 自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名. v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移除.v-enter-active: 定义过渡的状态.在元素整个过渡过程中作用,在元素被插入时生效,在 transition/animation 完成之后移除. 这个类可以被用来定义过渡的过程时间,延迟和曲线函数.v-enter-to: 2.1.8

[原]浅谈vue过渡动画,简单易懂

在vue中什么是动画 开始先啰嗦一下,动画的解释(自我理解??) 在一个标签里面的类容,我们视觉看到它,这时候,这个标签以什么形式出现,中间变化了什么,并且以什么形式消失,是有一个过渡的存在的方式,我叫做动画 (不是那种干出,干消失哈??,大神原谅我粗糙的说辞\(^o^)/~) 闲言碎语不多讲,上干货了 在vue中,提供给我们一个很好写过渡动画的内置组件transition 基本用法就是给我们需要动画的标签外面嵌套transition标签,并且给上属性,起码name不要忘了 <transitio

Vue,动画-列表动画(添加)

Vue,动画-列表动画(添加) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Comp

缓动动画封装详细讲解

---来自一个前端妹子 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 7 8 <!-- 9 先快后慢 10 一开始的步子要迈的大,后面的步子要小 11 12 步子要越来越小 13 14 被除数 / 10 ,被除数的值越大,结果就越大,被除数越小.值就越小

vue css动画原理

从隐藏到显现 从显现到隐藏 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Vue中的动画</title> 6 <style> 7 .fade-enter, 8 .fade-leave-to { 9 opacity: 0; 10 } 11 .fade-enter-active, 12 .fade-leave-ac

Vue: axios 请求封装及设置默认域名前缀 (for Vue 2.0)

1. 实现效果 以get方法向http://192.168.32.12:8080/users 发起请求.获取数据并进行处理 this.apiGet('/users', {}) .then((res) => { console.log(res) }, (err) => { console.log(err) }) 2. 实现步骤一之配置域名前缀 2.1 安装axios cnpm install axios --save 2.2 配置webpack.base.conf.js 文件 引入 const

Vue 过渡动画

<!DOCTYPE html> <html> <head> <title>过渡动画</title> <style type="text/css"> /*必须所有的元素 或者属性 0.3s 以ease的形式*/ .show-enter-active, .show-leave-active{ transition:all 1s ease; padding-left: 10px; } /*.show-enter 定义进入

vue的动画和过渡

toggle 动画内容 .fade-enter-active, .fade-leave-active { transition: all .5s; } /*.fade-enter, .fade-leave-to { opacity: 0; }*/ .fade-enter{ transform: translate(-100px,0); } .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { transform: transl