基于Vue實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)時(shí)的“滑動(dòng)切換效果”

???????在移動(dòng)端原生應(yīng)用中历造,頁(yè)面之間的跳轉(zhuǎn)會(huì)以“滑動(dòng)”的方式進(jìn)行切換岛蚤,展示效果極佳闹炉,那么能不能在我們的webApp項(xiàng)目中也能實(shí)現(xiàn)相應(yīng)的效果呢?是可以的奢方。下面我們就以在vue中的應(yīng)用為例搔扁,來(lái)看一下它具體實(shí)現(xiàn)的邏輯吧。

???????可能您對(duì)我說(shuō)的這個(gè)效果還不是很了解蟋字,您可以訪問(wèn)這個(gè)網(wǎng)站稿蹲,進(jìn)行相應(yīng)的頁(yè)面切換操作,具體來(lái)感受一下鹊奖。

進(jìn)入時(shí)的場(chǎng)景

離開(kāi)時(shí)的場(chǎng)景

???????我們可以看到

進(jìn)入時(shí)苛聘,要進(jìn)入的和要移出的頁(yè)面均是從右向左推的。
離開(kāi)時(shí)忠聚,要進(jìn)入的和要移出的頁(yè)面均是從左向右推的设哗。

???????理解了上述的過(guò)渡效果,我們就可以設(shè)計(jì)我們具體的業(yè)務(wù)邏輯了两蟀。

一网梢、頁(yè)面過(guò)渡效果的實(shí)現(xiàn)邏輯

???????1、創(chuàng)建動(dòng)畫css赂毯。
???????2战虏、判斷當(dāng)前是需要執(zhí)行動(dòng)畫(進(jìn)入頁(yè)面)還是后退動(dòng)畫(后退頁(yè)面)
???????????監(jiān)聽(tīng)路由對(duì)象$route
???????????讓頁(yè)面跳轉(zhuǎn)的時(shí)候,攜帶包含跳轉(zhuǎn)標(biāo)記的 param,通過(guò)對(duì) param中跳轉(zhuǎn)標(biāo)記的判斷欢瞪,來(lái)判斷當(dāng)前是否為跳轉(zhuǎn)動(dòng)畫活烙。
???????????如果說(shuō)param包含跳轉(zhuǎn)標(biāo)記,那么當(dāng)前為跳轉(zhuǎn)動(dòng)畫,否則當(dāng)前為后退動(dòng)畫遣鼓。
???????3啸盏、通過(guò)transition的方式來(lái)為route-view指定對(duì)應(yīng)的動(dòng)畫效果。

三骑祟、實(shí)現(xiàn)頁(yè)面間滑動(dòng)切換效果

???????在vue中實(shí)現(xiàn)這樣的功能還是有天然的優(yōu)勢(shì)的回懦,因?yàn)槲覀兪褂胿ue進(jìn)行開(kāi)發(fā)時(shí)一般會(huì)選擇SPA(單頁(yè)應(yīng)用)的開(kāi)發(fā)模式气笙,就是在運(yùn)行的時(shí)候,要切換的的頁(yè)面主體結(jié)構(gòu)(可能存在異步加載資源的過(guò)程)都在一個(gè)頁(yè)面中怯晕,這樣就很容易實(shí)現(xiàn)我們的滑動(dòng)效果潜圃。若果不采用SPA這種方式進(jìn)行開(kāi)發(fā),那該如何呢舟茶?我這里也沒(méi)有做過(guò)嘗試谭期,但是很早之前有書上說(shuō)可以設(shè)置``HTMLmeta```標(biāo)簽來(lái)實(shí)現(xiàn),具體的您可以自行查閱一下。

???????在vue-router中提供了狀態(tài)過(guò)渡這樣的效果吧凉,就是讓你在進(jìn)行頁(yè)面(組件)間跳轉(zhuǎn)的時(shí)候可以實(shí)現(xiàn)一些過(guò)渡效果隧出。不過(guò)遺憾的是,它上面的實(shí)例都有一定的難度阀捅。所以我也不打算使用它的示例來(lái)進(jìn)行說(shuō)明胀瞪。

1、設(shè)置切換時(shí)的css動(dòng)畫樣式

  // push 頁(yè)面時(shí):新頁(yè)面的進(jìn)入動(dòng)畫
@keyframes fold-left-in{
    0% {
       transform: translate(100%, 0);
    }
    100% {
      transform: translate(0,0)
    }
  }
  // push 頁(yè)面時(shí):原頁(yè)面的退出動(dòng)畫
@keyframes fold-left-out{
    0% {
       transform: translate(0, 0);
    }
    100% {
      transform: translate(-100%,0)
    }
  }
  // 后退頁(yè)面時(shí): 即將展示頁(yè)面的動(dòng)畫
@keyframes fold-right-in{
    0% {
       transform: translate(-100%, 0);
    }
    100% {
      transform: translate(0,0)
    }
  }
// 后退頁(yè)面時(shí): 后退頁(yè)面的動(dòng)畫
@keyframes fold-right-out{
    0% {
       transform: translate(0, 0);
    }
    100% {
      transform: translate(100%,0)
    }
  }

??????? 如果您理解了前面分析動(dòng)畫運(yùn)行的軌跡饲鄙,那么上面css的樣式就相對(duì)很好理解凄诞。

2、設(shè)置跳轉(zhuǎn)標(biāo)記

???????本篇文章中忍级,我們只設(shè)計(jì)了HomeAbout頁(yè)面之間的跳轉(zhuǎn)帆谍。下面是兩個(gè)頁(yè)面相應(yīng)的跳轉(zhuǎn)邏輯。
Home組件

methods: {
  toggle(){
     this.$router.push({
           name: 'About',
           params: {
             routerType: 'push'
           }
      })
   }
}

About組件

methods: {
      toggle(){
        this.$router.go(-1)
      }
}

??????? Home組件攜帶了跳轉(zhuǎn)標(biāo)記push,會(huì)使用fold-left動(dòng)畫,而About組件沒(méi)有攜帶跳轉(zhuǎn)標(biāo)記,會(huì)使用fold-right動(dòng)畫轴咱。

3既忆、實(shí)現(xiàn)滑動(dòng)跳轉(zhuǎn)邏輯(App.vue)

修改模版

<transition :name="transitionName">
      <router-view />
</transition>

創(chuàng)建數(shù)據(jù)

data(){
      return {
        transitionName: 'fold-left'
      }
}

監(jiān)聽(tīng)路由對(duì)象,決定使用哪種過(guò)渡效果

watch: {
      // 監(jiān)聽(tīng)路由對(duì)象嗦玖,決定使用哪種過(guò)渡效果
      '$route'(to, from){
        // 獲取到攜帶的標(biāo)記
        const routerType = to.params.routerType
        if(routerType === 'push'){
          // 跳轉(zhuǎn)頁(yè)面
          this.transitionName = 'fold-left'
        } else{
          // 后退頁(yè)面
          this.transitionName = 'fold-right'
        }
      }
}

??????? 整體的邏輯就是通過(guò)判斷就你要跳轉(zhuǎn)到的路由是否函數(shù)跳轉(zhuǎn)跳轉(zhuǎn)標(biāo)記const routerType = to.params.routerType,然后動(dòng)態(tài)的改變transitionName的值跃脊,進(jìn)而響應(yīng)<router-link/>的<transition>過(guò)渡效果的名稱宇挫。
??????? 整體的邏輯設(shè)計(jì)到這里就差不多了,但是但我們切換的時(shí)候會(huì)存在一個(gè)問(wèn)題酪术,兩個(gè)頁(yè)面之間有空白的區(qū)域器瘪,這是什么原因造成的呢?前面分析過(guò)绘雁,當(dāng)前的這種方式只適合SPA開(kāi)發(fā)模式橡疼,我們當(dāng)前的每一個(gè)頁(yè)面的節(jié)點(diǎn).home.about之間是按照正常的方式排列的庐舟。所以會(huì)存在這樣的問(wèn)題欣除,怎么解決呢,我們只需要讓他們脫離文檔流挪略,顯示在同一行上面历帚。那就只需要添加下面的css屬性:

.home{
  position:absolute;
  width:100%;
  height: 100%;
}
.about{
  position:absolute;
  width:100%;
  height: 100%;
}

??????? 至此滔岳,我們的滑動(dòng)效果就實(shí)現(xiàn)了。此處代碼間文件配合較多挽牢,我就不將代碼一一列出谱煤,請(qǐng)您注意分析過(guò)程。感謝您的閱讀禽拔!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刘离,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睹栖,更是在濱河造成了極大的恐慌硫惕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磨淌,死亡現(xiàn)場(chǎng)離奇詭異疲憋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)梁只,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門缚柳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人搪锣,你說(shuō)我怎么就攤上這事秋忙。” “怎么了构舟?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵灰追,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狗超,道長(zhǎng)弹澎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任努咐,我火速辦了婚禮苦蒿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渗稍。我一直安慰自己佩迟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布竿屹。 她就那樣靜靜地躺著报强,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拱燃。 梳的紋絲不亂的頭發(fā)上秉溉,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼坚嗜。 笑死夯膀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苍蔬。 我是一名探鬼主播诱建,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碟绑!你這毒婦竟也來(lái)了俺猿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤格仲,失蹤者是張志新(化名)和其女友劉穎押袍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凯肋,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谊惭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侮东。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圈盔。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悄雅,靈堂內(nèi)的尸體忽然破棺而出驱敲,到底是詐尸還是另有隱情,我是刑警寧澤宽闲,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布众眨,位于F島的核電站,受9級(jí)特大地震影響容诬,放射性物質(zhì)發(fā)生泄漏娩梨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一览徒、第九天 我趴在偏房一處隱蔽的房頂上張望姚建。 院中可真熱鬧,春花似錦吱殉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至铅匹,卻和暖如春押赊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工流礁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涕俗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓神帅,卻偏偏與公主長(zhǎng)得像再姑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子找御,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355