vue組件切換時(shí)使用過渡(transition)時(shí)應(yīng)該注意的一些事項(xiàng)

最近在做公司項(xiàng)目時(shí),涉及到做一個(gè)問卷調(diào)查吼具,需要在不同題目題目之間使用transition產(chǎn)生一個(gè)過渡效果:當(dāng)點(diǎn)擊按鈕進(jìn)入下一題時(shí)僚纷,當(dāng)前卡片從正中間向左滑動(dòng)至不可見后,下一題對(duì)應(yīng)的卡片從右邊不可見區(qū)域從右向左滑動(dòng)至屏幕正中間拗盒,在這個(gè)過程中我發(fā)現(xiàn)了幾個(gè)問題怖竭,下面是該部分對(duì)應(yīng)的代碼

<transition :name="slide">
  <keep-alive>
    <component 
      :is="questionMap[currentQuestion.type]"
      :currentQuestion="currentQuestion"
      :index="index">
    </component>
  </keep-alive>
</transition>

問題1:不同類型的組件之間切換,有過渡效果陡蝇,而相同組件(不同內(nèi)容)切換則沒有過渡效果

vue官網(wǎng)的描述:當(dāng)有相同標(biāo)簽名的元素切換時(shí)痊臭,需要通過 key 特性設(shè)置唯一的值來標(biāo)記以讓 Vue 區(qū)分它們,否則 Vue 為了效率只會(huì)替換相同標(biāo)簽內(nèi)部的內(nèi)容登夫。即使在技術(shù)上沒有必要广匙,給在 組件中的多個(gè)元素設(shè)置 key 是一個(gè)更好的實(shí)踐。
改進(jìn)后代碼

<transition :name="slide">
  <keep-alive>
    <component 
      :is="questionMap[currentQuestion.type]"
      :key="index"
      :currentQuestion="currentQuestion"
      :index="index">
    </component>
  </keep-alive>
</transition>

給組件添加了key=”index”了之后恼策,不管任何類型都有過渡效果了鸦致,因?yàn)?br> 此時(shí)vue將每一個(gè)組件區(qū)分為不同的組件

問題2:前一個(gè)組件滑動(dòng)出去后,后一個(gè)組件沒有滑動(dòng)效果涣楷,而是直接顯示了

過渡模式有一個(gè)問題:一個(gè)離開過渡的時(shí)候另一個(gè)開始進(jìn)入過渡蹋凝。這是 的默認(rèn)行為 - 進(jìn)入和離開同時(shí)發(fā)生,因?yàn)檫@樣也導(dǎo)致了兩個(gè)卡片的過渡不太復(fù)合需求总棵,我們需要的是一個(gè)先離開后另一個(gè)再進(jìn)入鳍寂。

同時(shí)生效的進(jìn)入和離開的過渡不能滿足所有要求,所以 Vue 提供了 過渡模式
in-out:新元素先進(jìn)行過渡情龄,完成之后當(dāng)前元素過渡離開迄汛。
out-in:當(dāng)前元素先進(jìn)行過渡,完成之后新元素過渡進(jìn)入骤视。

因此我們需要在transition標(biāo)簽中添加mode來達(dá)成效果:

<transition :name="slide" mode="out-in">
  <keep-alive>
    <component 
      :is="questionMap[currentQuestion.type]"
      :key="index"
      :currentQuestion="currentQuestion"
      :index="index">
    </component>
  </keep-alive>
</transition>

如果要使用列表排序的話鞍爱,需要使用transition-group,下面是一個(gè)簡(jiǎn)單的例子

<div id="list-demo" class="demo">
  <button v-on:click="add">Add</button>
  <button v-on:click="remove">Remove</button>
  <transition-group name="list" tag="p">
    <span v-for="item in items" v-bind:key="item" class="list-item">
      {{ item }}
    </span>
  </transition-group>
</div>
new Vue({
  el: '#list-demo',
  data: {
    items: [1,2,3,4,5,6,7,8,9],
    nextNum: 10
  },
  methods: {
    randomIndex: function () {
      return Math.floor(Math.random() * this.items.length)
    },
    add: function () {
      this.items.splice(this.randomIndex(), 0, this.nextNum++)
    },
    remove: function () {
      this.items.splice(this.randomIndex(), 1)
    },
  }
})
.list-item {
  display: inline-block;
  margin-right: 10px;
}
.list-enter-active, .list-leave-active {
  transition: all 1s;
}
.list-enter, .list-leave-to
/* .list-leave-active for below version 2.1.8 */ {
  opacity: 0;
  transform: translateY(30px);
}

轉(zhuǎn)自: vue組件切換時(shí)使用過渡(transition)時(shí)應(yīng)該注意的一些事項(xiàng)_Encorehwang的博客-CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末专酗,一起剝皮案震驚了整個(gè)濱河市睹逃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祷肯,老刑警劉巖沉填,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異佑笋,居然都是意外死亡翼闹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門蒋纬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猎荠,“玉大人坚弱,你說我怎么就攤上這事」匾。” “怎么了荒叶?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)输虱。 經(jīng)常有香客問我些楣,道長(zhǎng),這世上最難降的妖魔是什么悼瓮? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮艰猬,結(jié)果婚禮上横堡,老公的妹妹穿的比我還像新娘。我一直安慰自己冠桃,他們只是感情好命贴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著食听,像睡著了一般胸蛛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上樱报,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天葬项,我揣著相機(jī)與錄音,去河邊找鬼迹蛤。 笑死民珍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盗飒。 我是一名探鬼主播嚷量,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼逆趣!你這毒婦竟也來了蝶溶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤宣渗,失蹤者是張志新(化名)和其女友劉穎抖所,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痕囱,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡部蛇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咐蝇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涯鲁。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巷查,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抹腿,到底是詐尸還是另有隱情岛请,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布警绩,位于F島的核電站崇败,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肩祥。R本人自食惡果不足惜后室,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望混狠。 院中可真熱鬧岸霹,春花似錦、人聲如沸将饺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)予弧。三九已至刮吧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掖蛤,已是汗流浹背杀捻。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚓庭,地道東北人水醋。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像彪置,于是被迫代替她去往敵國(guó)和親拄踪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容