中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue 頁面切換效果之 BubbleTransition(推薦)

發布時間:2020-08-29 22:47:23 來源:腳本之家 閱讀:218 作者:HelKyle 欄目:web開發

Vue 頁面切換效果之 BubbleTransition(推薦) 

CodePen 地址

前端使用 SPA 之后,能獲得更多的控制權,比如頁面切換動畫,使用后端頁面我們可能做不了上面的效果,或者做出來會出現明顯的閃屏。因為所有資源都需要重新加載。

今天使用 vue,vue-router,animejs 來講解如何上面的效果是如何實現的。

步驟

  1. 點擊菜單,生成 Bubble,開始執行入場動畫
  2. 頁面跳轉
  3. 執行退場動畫

函數式調用組件

我希望效果是通過一個對象去調用,而不是 v-show, v-if 之類的指令,并且為了保持統一,仍然使用 Vue 來寫組件。我通常會用新的 Vue 根節點來實現,讓效果獨立于業務組件之外。

let instance = null
function createServices (Comp) {
 // ...
 return new Vue({
 // ...
 }).$children[0]
}
function getInstance () {
 instance = instance || createServices(BubbleTransitionComponent)
 return instance
}
const BubbleTransition = {
 scaleIn: () => {
 return getInstance().animate('scaleIn')
 },
 fadeOut: () => {
 return getInstance().animate('fadeOut')
 }
}

接著實現 BubbleTransitionComponent,那么 BubbleTransition.scaleIn, BubbleTransition.scaleOut 就能正常工作了。 animejs 可以監聽的動畫執行結束的事件。anime().finished 獲得 Promise 對象。

<template>
 <div class="transition-bubble">
 <span v-show="animating" class="bubble" id="bubble">
 </span>
 </div>
</template>
<script>
import anime from 'animejs'
export default {
 name: 'transition-bubble',
 data () {
 return {
  animating: false,
  animeObjs: []
 }
 },
 methods: {
 scaleIn (selector = '#bubble', {duration = 800, easing = 'linear'} = {}) {
  // this.animeObjs.push(anime().finished)
 },
 fadeOut (selector = '#bubble', {duration = 300, easing = 'linear'} = {}) {
  // ...
 },
 resetAnimeObjs () {
  this.animeObjs.reset()
  this.animeObjs = []
 },
 animate (action, thenReset) {
  return this[action]().then(() => {
  this.resetAnimeObjs()
  })
 }
 }
}

最初的想法是,在 router config 里面給特定路由 meta 添加標記,beforeEach 的時候判斷判斷該標記執行動畫。但是這種做法不夠靈活,改成通過 Hash 來標記,結合 Vue-router,切換時重置 hash。

<router-link class="router-link" to="/#__bubble__transition__">Home</router-link>
const BUBBLE_TRANSITION_IDENTIFIER = '__bubble__transition__'
router.beforeEach((to, from, next) => {
 if (to.hash.indexOf(BUBBLE_TRANSITION_IDENTIFIER) > 0) {
 const redirectTo = Object.assign({}, to)
 redirectTo.hash = ''
 BubbleTransition.scaleIn()
  .then(() => next(redirectTo))
 } else {
 next()
 }
})
router.afterEach((to, from) => {
 BubbleTransition.fadeOut()
})

酷炫的動畫能在一瞬間抓住用戶的眼球,我自己也經常在逛一些網站的時候發出,wocao,太酷了!!!的感嘆。可能最終的實現用不了幾行代碼,自己多動手實現一下,下次設計師提出不合理的動畫需求時可以裝逼,這種效果我分分鐘能做出來,但是我認為這里不應該使用 ** 動畫,不符合用戶的心理預期啊。

CodePen 地址

總結

以上所述是小編給大家介紹的Vue 頁面切換效果之 BubbleTransition(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连南| 怀柔区| 信阳市| 昭平县| 台州市| 凤城市| 石景山区| 永丰县| 延边| 盐边县| 陇川县| 淮阳县| 上栗县| 沁源县| 葫芦岛市| 环江| 团风县| 七台河市| 鄂托克旗| 霍城县| 大渡口区| 成武县| 彭阳县| 沈丘县| 久治县| 南乐县| 威远县| 阿鲁科尔沁旗| 临猗县| 平江县| 昌宁县| 保德县| 太和县| 云龙县| 博客| 赤峰市| 通河县| 洪泽县| 崇州市| 新兴县| 鲁山县|