Vue相關(過渡動畫)


Vue 過渡 && 動畫

一、CSS過渡

1.transition標簽可以用來封裝需要過渡的元素,添加entering/leaving 過渡,

條件是:
(1)使用條件渲染語句 v-if/v-show
(2)動態組件
(3)組件根節點

  通過style標簽設置過渡動畫時需要為transition指定name屬性,當指定了name屬性之后,
vue會自動去找幾個過渡動畫需要的類

active類中一般放過渡屬性,例如transition,animation等,放animation需要指定動畫關鍵幀
(v-是這些類名的前綴,會被替換為transition中name屬性)
 v-enter-active(進入中,過渡狀態)
 v-enter(進入之前,開始過渡狀態)
 v-enter-to(進入結束,開始過渡的結束狀態) 一般不用
 v-leave-active(離開中,過渡狀態)
 v-leave(離開前,離開過渡狀態)
 v-leave-to(離開結束,離開過渡的結束狀態) 一般不用

二、CSS動畫

1.CSS動畫同CSS過渡,也需要四個類,active類中放的是animation,需要指定關鍵幀,關鍵幀使用transform定義動畫狀態,當設置了transition的name屬性之后,vue會自動去探測是否存在這幾個類,如果有,就執行了類中的動畫

2.自定義動畫,通常用於和第三方動畫庫相結合

	<transition 
		enter-active-class="animated tada"
		leave-active-class="animated bounceOutRight"
	>
		 <p v-if="show">hello</p>
	</transition>

  為transition標簽設置以下幾個屬性來指定動畫需要的類,這幾個類的優先級高於普通類,與第三方動畫庫相結合時十分有用

(1)enter-active-class
(2)enter-class
(3)enter-to-class
(4)leave-active-class
(5)leave-class
(6)leave-to-class

三、使用鈎子函數設置動畫

  可以通過在transition標簽中綁定鈎子函數來設置過渡動畫,幾個鈎子函數如下:

鈎子函數 對應的參數
before-enter (el)
enter (el,done)
after-enter (el)
enter-cancelled (el)
before-leave (el)
leave (el,done)
after-leave (el)
leave-cancelled (el)

通常在before-enter或before-leave中指定狀態,在enter或leave函數中執行動畫

	beforeEnter: function (el) {
        // 進入之前
        $(el).css({
            opacity: 0,
            color: 'red',
        });
    },
    
    enter:  function (el, done) {
    
	    // 第一種
	    $(el).animate({
	    	opacity:1,
	    },3000,function(){
	    	//需要在動畫執行完畢的回調函數中調用done
	    	done();
	    })
	
		// 	第二種
		$(el).fadeIn(1000,()=>{
			done();
		})
		
		// 第三種 引入velocity動畫庫
		<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>
		
		Velocity(el, {opacity: 1, translateX: '20px', fontSize: '2em'}, {duration: 300});
		Velocity(el, {translateX: '0px', fontSize: '1em'}, {complete: done})
		
    },
            

  當只用 JavaScript 過渡的時候, 在 enter 和 leave 中,回調函數 done 是必須的 。 否則,它們會被同步調用,過渡會立即完成。

四、初始渲染的過渡

通過為transition標簽添加appear屬性設置節點在初始渲染時的過渡效果

  1. 同樣可以定義自定義類名

    appear-class

    appear-to-class

    appear-active-class

  2. 通過可以定義JavaScript中的鈎子函數

    before-appear
    appear
    after-appear
    appear-cancelled

  3. 為transiton設置appear屬性,如果沒有對應的過渡類或者鈎子函數會默認去執行before-enter,和enter鈎子函數的內容

五、多元素的過渡

注意相同標簽切換需要設置key屬性:

  當有相同標簽名的元素切換時,需要通過 key 特性設置唯一的值來標記以讓 Vue 區分它們,否則 Vue 為了效率只會替換相同標簽內部的內容

transition標簽內部最外部根節點只能有一個,但通過v-if,v-else-if,v-else設置切換時候可以有多個跟標簽

六、過渡模式

為transition標簽設置mode屬性

(1)in-out:新元素先進行過渡,完成之后當前元素過渡離開
(2)out-in:當前元素先進行過渡,完成之后新元素過渡進入

七、多組件過渡

  使用v-bind:is屬性為保留組件component來指定要渲染成哪個組件

	<transition name="component-fade" mode="out-in">
		<component v-bind:is="view"></component>
	</transition>

八、列表過渡

  使用tranistio-group標簽來為多個節點設置過渡
tranistio-group標簽默認渲染成span標簽,可通過為其設置tag="div"屬性將其渲染成div
tranistio-group內部元素總是需要 提供唯一的 key 屬性值

九、列表位移過渡

transition-group標簽添加v-move屬性定義元素位置改變時使用的動畫,同進入和離開動畫一樣,v會被替換成transition-group便簽的name屬性,也可以通過move-class自定義類來設置自定義位移時使用的類
當要設置離開時的位移過渡時需要設置絕對定位position:absolute

	<!--filp-list為transition-group便簽的name屬性-->
	.flip-list-move {
		transition: transform 1s;
	}

十、Lazy sudoku

通過tranistion-group標簽設置隨機數獨元素的切換,注意transition-group內的每個元素的v-bind:key需要綁定的和元素相關,不然只是簡單的數字替換,非元素的移動

CSS:
		* {
			box-sizing: border-box;
		}

		.box {
			display: block;
			margin: 0 auto;
			width: 450px;
			height: 450px;
		}

		.item {
			display: inline-block;
			width: 50px;
			height: 50px;
			line-height: 50px;
			border: 1px solid #eee;
			text-align: center;
			color: #666;
		}

		.fade-move {
			transition: all 0.4s linear;
		}
		



HTML:
	<div id="app">
		<transition-group name="fade" class="box">
			<span v-for="item in numArr" :key="item.id" class="item" :style="item.bg">{{ item.num }}</span>
		</transition-group>
	</div>
	
	
	
JavaScript
	var app = new Vue({
        el: '#app',
        data: {
            numArr: new Array(81).fill(1).map((value, index) => {
                return {
                    num: (index % 9),
                    id: index,
                    bg:{
                        backgroundColor:'hsl(' + Math.floor(Math.random() * 360) + ',70% ,80%)'
                    }
                }
            }),
        },
        methods: {
            shuffle: function () {
                this.numArr.sort(function () {
                    return Math.random() - 0.5;
                });
            }
        },
        created: function () {
            this.shuffle();
        }
    });	

十一、可復用的過渡

  將transition或者transition-group標簽作為組件的根標簽即可實現可復用的過渡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM