• Vue(十四)过渡(动画)


    过渡(动画)
    1. 简介
    Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果
    本质上还是使用CSS3动画:transition、animation
    2. 基本用法
    使用transition组件,将要执行动画的元素包含在该组件内
    <transition>
    运动的元素
    </transition>
    过滤的CSS类名:6个
     
    3. 钩子函数
    8个
    @before-enter="beforeEnter"
    @enter="enter"
    @after-enter="afterEnter"
    @before-leave="beforeLeave"
    @leave="leave"
    @after-leave="afterLeave"

      

    <!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-Compatible" content="ie=edge">
    	<title>vue</title>
    	<script src="https://unpkg.com/vue"></script>
    	<style>
    		
    		p{
    			 300px;
    			height: 300px;
    			background-color:red;
    		}
    		.fade-enter-active,.fade-leave-active{
    			transition:all 3s ease;
    		}
    		.fade-enter-active{
    			opacity:1;
    			300px;
    			height:300px;
    		}
    		.fade-leave-active{
    			opacity:0;
    			50px;
    			height:50px;
    		}
    		/* .fade-enter需要放在.fade-enter-active的后面 */
    		.fade-enter{
    			opacity:0;
    			 100px;
    			height: 100px;
    		}
    
    	</style>
    
    </head>
    
    <body>
    
    	<div id="itany">
    		<button @click="flag=!flag">点我</button>
    		
    		<transition name="fade" 
    			@before-enter="beforeEnter"
    			@enter="enter"
    			@after-enter="afterEnter"
    			@before-leave="beforeLeave"
    			@leave="leave"
    			@after-leave="afterLeave"
    		>
    			<p v-show="flag">网博</p>
    		</transition>
    	</div>
    
    	<script>
    		var vm=new Vue({
    			el:'#itany',
    			data:{
    				flag:false
    			},
    			methods:{
    				beforeEnter(el){
    					// alert('动画进入之前');
    				},
    				enter(){
    					// alert('动画进入');
    				},
    				afterEnter(el){
    					// alert('动画进入之后');
    					el.style.background='blue';
    				},
    				beforeLeave(){
    					// alert('动画即将之前');
    				},
    				leave(){
    					// alert('动画离开');
    				},
    				afterLeave(el){
    					// alert('动画离开之后');
    					el.style.background='red';
    				}
    			}
    		});
    	</script>
    	
    </body>
    
    </html>
    

      

    4. 结合第三方动画库animate..css一起使用(https://daneden.github.io/animate.css/)
    <transition enter-active-class="animated fadeInLeft" leave-active-class="animated fadeOutRight">
      <p v-show="flag">网博</p>
    </transition>
    <!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-Compatible" content="ie=edge">
    	<title>vue</title>
    	<link rel="stylesheet" href="css/animate.css">
    	<script src="https://unpkg.com/vue"></script>
    	<script>
    
    		window.onload = function(){
    
    			var vm = new Vue({
    				el:'#app',
    				data:{
    					flag:false
    				}
    			})
    
    		}
    
    	</script>
    
    	<style>
    		p{
    			 300px;
    			height: 300px;
    			background-color: red;
    			margin:0 auto;
    		}
    	</style>
    
    </head>
    
    <body>
    
        <div id="app">
    		<button @click="flag=!flag">点我</button>
    	
    		<transition enter-active-class="animated rollIn" leave-active-class="animated rollOut">
    			<p v-show="flag">网博</p>
    		</transition>
        </div>
    
    </body>
    
    </html>
    

      

     
    5. 多元素动画
    <transition-group>

      

    		<transition-group enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutLeft">
    			<p v-show="flag" :key="1">你好</p>
    			<p v-show="flag" :key="2">世界</p>
    		</transition-group>
    

      

      

    6. 练习
    多元素动画
    <!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-Compatible" content="ie=edge">
    	<title>vue</title>
    	<link rel="stylesheet" href="css/animate.css">
    	<script src="https://unpkg.com/vue"></script>
    	<script>
    
    		window.onload = function(){
    
    			var vm = new Vue({
    				el:'#app',
    				data:{
    					flag:true,
    					arr:['tom','jack','mike','alice','alex','mark'],
    					name:''
    				},
    				/* 计算属性 */
    				computed:{
    					arr2:function(){
    						var temp=[];
    						this.arr.forEach(val => {
    							if(val.includes(this.name)){
    								temp.push(val);
    							}
    						});
    						return temp;
    					}
    				}
    			})
    
    		}
    
    	</script>
    
    	<style>
    		p{
    			 50px;
    			height: 50px;
    			background-color: red;
    			margin:0 auto;
    		}
    	</style>
    
    </head>
    
    <body>
    
        <div id="app">
    		<input type="text" v-model="name">
    		<transition-group enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
    				<p v-for="(v,k) in arr2" :key="k">
    					{{v}}
    				</p>
    		</transition-group>
        </div>
    
    </body>
    
    </html>
    

      

     
     
     
  • 相关阅读:
    table固定头部,tbody内容滚动
    js 中json遍历 添加 修改 类型转换
    SEO优化
    JS对字符串的操作,截取
    移动端 去掉滚动栏
    JS 引擎的执行机制
    Uncaught SyntaxError: Unexpected token ILLEGAL
    利用css 画各种三角形
    js文本公告滚动展示,图片轮播....
    js判断手指的上滑,下滑,左滑,右滑,事件监听
  • 原文地址:https://www.cnblogs.com/yulingjia/p/8303637.html
Copyright © 2020-2023  润新知