vue 組件中使用 transition 和 transition-group實現(xiàn)過渡動畫?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
成都創(chuàng)新互聯(lián)公司成立10年來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、申請域名、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。網(wǎng)站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設(shè)都非常重要,成都創(chuàng)新互聯(lián)公司通過對建站技術(shù)性的掌握、對創(chuàng)意設(shè)計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
template模板結(jié)構(gòu)
// 單個元素 <transition name="自定義名字"> <p v-if="show">hello</p> </transition> // 列表元素: 注意group的直接子元素是v-for渲染出來的 <ul class="list"> <transition-group name="list"> <li v-for="(item, index) in gameList" :key="item.id"> <app-horizontal :itemData="item"></app-horizontal> </li> </transition-group> </ul>
name 版,name 為組件中的屬性
出現(xiàn)的過程: name-enter(初始態(tài)) => name-enter-active(中間態(tài)) => name-enter-to(終止態(tài))
消失的過程: name-leave => name-leave-active => name-leave-to
以進(jìn)場過渡動畫為例子
我們可以分別設(shè)置 enter 階段 和 enter-to 階段的動畫
1.設(shè)置進(jìn)入時需要過渡的屬性
.name-enter { opacity: 0; transform: translateY(30px) }
2.然后在 name-enter-active中設(shè)置過渡時間
.name-enter-active { transition: all .3s; }
3.最后在 name-enter-to 中寫上終止態(tài)屬性
其實終止態(tài)的opacity: 1;transform: none; 是默認(rèn)的,可以不用寫
.name-enter-to { opacity: 1; transform: translateY(0); }
如果要給列表中的元素設(shè)置交錯的效果, 元素不多的話可以添加 delay 屬性
.name-enter-active:nth-child(3n+1) { transition-delay: 0s; } .name-enter-active:nth-child(3n+2) { transition-delay: .1s; } .name-enter-active:nth-child(3n+3) { transition-delay: .2s; }
離場動畫同理...
js 鉤子實現(xiàn)過渡動畫: 通過操作類名; 就是 name 版的 js 實現(xiàn)
// 例如實現(xiàn)上述列表依次顯示 <ul class="list"> <transition-group v-bind:css="false" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter"> <li v-for="(item, index) in gameList" :key="item.id" :data-delay="index*100" > <app-horizontal :itemData="item"></app-horizontal> </li> </transition-group> </ul> // methods: { // 事先定義上述類名 // 在beforeEnter enter afterEnter 鉤子中手動操作上述類名 // 初始態(tài) beforeEnter(dom) { dom.classList.add('list-enter', 'list-enter-active'); }, // 中間態(tài) enter(dom,done) { // 通過 setTimeout + dataset 實現(xiàn)過渡 let delay = dom.dataset.delay; setTimeout(function () { dom.classList.remove('list-enter'); dom.classList.add('list-enter-to'); //監(jiān)聽 transitionend 事件 var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd"; dom.addEventListener(transitionend, function onEnd() { // 移除事件 dom.removeEventListener(transitionend, onEnd); //調(diào)用done(),表示動畫已完成 done() }); }, delay) }, // 終止態(tài) afterEnter(dom) { dom.classList.remove('list-enter-to', 'list-enter-active'); } }
js 鉤子過渡動畫: 通過操作行內(nèi)屬性, 自定義動畫
<ul class="list"> <transition-group v-bind:css="false" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter"> <li v-for="(item, index) in gameList" :key="item.id" :data-delay="index*100" data-y = "100%" > <app-horizontal :itemData="item"></app-horizontal> </li> </transition-group> </ul> // 對應(yīng)的操作方法; 添加自定義的 dataset,給dom設(shè)置css樣式;根據(jù)需求添加 methods: { // 初始態(tài) beforeEnter(dom) { let { x = 0, y = 0, opacity = 0 } = dom.dataset; dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: translateX(${x}) translateY(${y});`; }, // 中間態(tài) enter(dom,done) { let delay = dom.dataset.delay; setTimeout(function () { dom.style.cssText = `transition: .3s;opacity: 1;transform: translateX(0) translateY(0);`; //監(jiān)聽 transitionend 事件 var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd"; dom.addEventListener(transitionend, function onEnd() { dom.removeEventListener(transitionend, onEnd); done(); }); }, delay) }, // 終止態(tài) afterEnter(dom) { dom.style.cssText = ""; } }
這里記錄一下監(jiān)聽css3的animation動畫和transition事件:
webkit-animation動畫有三個事件: 開始事件: webkitAnimationStart 結(jié)束事件: webkitAnimationEnd 重復(fù)運動事件: webkitAnimationIteration css3的過渡屬性transition: 一個事件 過渡結(jié)束: webkitTransitionEnd
看完上述內(nèi)容,你們掌握vue 組件中使用 transition 和 transition-group實現(xiàn)過渡動畫的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁題目:vue組件中使用transition和transition-group實現(xiàn)過渡動畫
URL鏈接:http://bm7419.com/article10/pcisgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、微信公眾號、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)