欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3使用transition組件改變DOM屬性的方式小結(jié)

 更新時(shí)間:2024年01月02日 16:33:09   作者:超捻  
這篇文章主要為大家詳細(xì)介紹了Vue3中使用transition組件改變DOM屬性的常用方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

想要制作基于狀態(tài)變化的過(guò)渡,使用vue內(nèi)置組件、Class、動(dòng)畫(huà)庫(kù)來(lái)快速實(shí)現(xiàn);

<Transition>會(huì)在單個(gè)元素或組件進(jìn)入和離開(kāi) DOM 時(shí)應(yīng)用動(dòng)畫(huà);

<TransitionGroup>會(huì)在一個(gè) v-for 列表中的元素或組件被插入,移動(dòng),或移除時(shí)應(yīng)用動(dòng)畫(huà);

下面使用Vue3的代碼對(duì)DOM的width、height屬性進(jìn)行過(guò)渡的不同實(shí)現(xiàn)方式

1、<transition>  標(biāo)簽

使用 name 屬性 來(lái)定義class 來(lái)實(shí)現(xiàn)DOM的屬性的過(guò)渡

<template>
   <div>
      <button @click="flag = !flag">switch</button>
      <!-- 用法1  name屬性定義class-->
      <transition name="fade">
        <div v-if="flag" class="box">name屬性定義class</div>
      </transition>
    </div>
 </template>
      
<script setup lang='ts'>
    import{ref} from 'vue'

    const flag = ref<boolean>(true)
    
</script>


<style scoped lang="scss">
    .box{
        width: 200px;
        height: 200px;
        background-color: red;
    }
    .fade-enter-from { // 進(jìn)入 從XX 開(kāi)始
    width: 0;
    height: 0;
}
    .fade-enter-active {
        // 過(guò)程
        transition: all 1.5s ease;
    }
    .fade-enter-to { // 進(jìn)入 到 XX 結(jié)束
        width: 200px;
        height: 200px;
        transform: scale(1.2); // 放大1.2倍
    }

    .fade-leave-from { // 離開(kāi) 從XX 開(kāi)始
        width: 200px;
        height: 200px;
    }
    .fade-leave-active {
        // 過(guò)程
        transition: all 1.5s ease;
    }
    .fade-leave-to { // 離開(kāi) 到 XX 結(jié)束
        width: 0;
        height: 0;
    }
</style>

頁(yè)面效果:

可以通過(guò)name屬性,綁定指定name的class, 靈活定義過(guò)渡的進(jìn)入離開(kāi)時(shí)的效果;

上面方式缺點(diǎn)是class.xxx-enter-from -enter-from部分是固定的, 如果想要定義整個(gè)class名,可以使用<Transition> 另外屬性;

進(jìn)入:enter-from-class、enter-active-class、enter-to-class、

離開(kāi):leave-from-classleave-active-class、leave-to-class

<template>
   <transition 
   enter-from-class="dada-enter-from"
   enter-active-class="dada-enter-active"
   enter-to-class="dada-enter-to"
   leave-from-class="dada-leave-from"
   leave-active-class="dada-leave-active"
   leave-to-class="dada-leave-to">
       <div v-if="flag" class="box">自定義類(lèi)名</div>
   </transition>
</template>
...
<style scoped lang="scss">
dada-enter-from {
   width: 0;
   height: 0;
}
.dada-enter-active {
   // 過(guò)程
   transition: all 1.5s ease;
}
.dada-enter-to { // 進(jìn)入 到 XX 結(jié)束
   width: 200px;
   height: 200px;
   transform: scale(1.2); // 放大1.2倍
}

.dada-leave-from {
   width: 200px;
   height: 200px;
}
.dada-leave-active {
   // 過(guò)程
   transition: all 1.5s ease;
}
.dada-leave-to { // 離開(kāi) 到 XX 結(jié)束
   width: 0;
   height: 0;
}
</style>

頁(yè)面效果:同上

<transition>  + 動(dòng)畫(huà)庫(kù)  animate.css

安裝: npm install animate.css --saveyarn add animate.css

<transition 
:duration="1000"
enter-active-class="animate__animated animate__flipInX"
leave-active-class="animate__animated animate__fadeOutDown">
        <div v-if="flag" class="box font-12">結(jié)合第三方類(lèi)庫(kù) animate.css</div> 
</transition>
      
<script setup lang='ts'>
import 'animate.css'
</script>

屬性duration:number|{enter:number, leave:number} 是指動(dòng)畫(huà)時(shí)長(zhǎng);如果進(jìn)入離開(kāi)定義相同時(shí)長(zhǎng),值可定義number類(lèi)型,如果進(jìn)入離開(kāi)定義不同時(shí)長(zhǎng),值可定義object類(lèi)型;

注意,使用class時(shí)不要漏加特定classanimate__animated,

頁(yè)面效果:

使用第三方CSS動(dòng)畫(huà)庫(kù),過(guò)渡效果豐富,減少自己寫(xiě)CSS代碼,直接添加對(duì)應(yīng)效果的class即可;

豐富有趣的交互效果,往往只有class是不夠的,還需要通過(guò)JS代碼控制動(dòng)畫(huà)來(lái)實(shí)現(xiàn);

想要通過(guò) Javascript來(lái)控制過(guò)渡動(dòng)畫(huà),首先理解過(guò)渡的時(shí)機(jī),動(dòng)畫(huà)分為進(jìn)入和離開(kāi),進(jìn)入有:進(jìn)入前、進(jìn)入、進(jìn)入后,同樣離開(kāi): 離開(kāi)前、離開(kāi)、離開(kāi)后,那么在不同時(shí)機(jī)中,觸發(fā)JavaScript 邏輯即可;

<transition> 對(duì)應(yīng)的事件:

  • @before-enter:進(jìn)入之前
  • @before-leave:離開(kāi)之前
  • @enter:進(jìn)入時(shí)
  • @leave:離開(kāi)時(shí)
  • @after-enter:進(jìn)入之后
  • @after-leave:離開(kāi)之后
  • @enter-cancelled:進(jìn)入中斷
  • @leave-cancelled (v-show only):離開(kāi)中斷
<template>
 <transition 
    @before-enter="EnterFrom"
    @enter="EnterActive"
    @after-enter="EnterTo"
    @enter-cancelled="EnterCancel"
    @before-leave="LeaveFrom"
    @leave="LeaveActive"
    @after-leave="LeaveTo"
    @leave-cancelled="LeaveCancel" >
    <div v-if="flag" class="box">8個(gè) 生命周期</div> 
</transition>
</template>
<script setup lang='ts'>
    // 進(jìn)入
    const EnterFrom = (el:Element) => {
        console.log('動(dòng)畫(huà)進(jìn)入之前EnterFrom');
    }
    const EnterActive = (el:Element, done: gsap.Callback) => {
        console.log('進(jìn)入時(shí) EnterActive');
    }
    const EnterTo = (el:Element) => {
        console.log(el,'動(dòng)畫(huà)進(jìn)入之后 EnterTo');

    }
    const EnterCancel = (el:Element) => {
        console.log(el,'動(dòng)畫(huà)進(jìn)過(guò)渡效果 被打斷時(shí) EnterCancel');
    }
    
    // 離開(kāi)
    // el DOM 節(jié)點(diǎn)
    const LeaveFrom = (el:Element) => {
        console.log(el, '動(dòng)畫(huà)離開(kāi)之前LeaveFrom');
    }
    const LeaveActive = (el:Element, done:Function) => {
        console.log(el,'離開(kāi)時(shí) LeaveActive');
        done()
    }
    const LeaveTo = (el:Element) => {
        console.log(el,'動(dòng)畫(huà)離開(kāi)之后 LeaveTo');
    }
    const LeaveCancel = (el:Element) => {
        console.log(el,'動(dòng)畫(huà)離開(kāi)過(guò)渡效果 被打斷時(shí)------');
    }
    


</script>

過(guò)渡進(jìn)入時(shí)觸發(fā):

過(guò)渡離開(kāi)時(shí)觸發(fā):

過(guò)渡中斷是什么時(shí)候出發(fā)呢,當(dāng)進(jìn)入過(guò)程中立馬切換為離開(kāi)時(shí)就會(huì)觸發(fā)中斷的函數(shù)了;當(dāng)理解了出發(fā)函數(shù)鉤子的時(shí)機(jī),可以結(jié)合優(yōu)秀的動(dòng)畫(huà)庫(kù),精準(zhǔn)的實(shí)現(xiàn)效果;

2、<transition-group> 標(biāo)簽

單節(jié)點(diǎn)動(dòng)畫(huà)可以使用<transition>,多節(jié)點(diǎn)可以使用 <transition-group>;
特點(diǎn):

  • 默認(rèn)情況下 它不會(huì)渲染一個(gè)包裹元素,但是可以通過(guò)tag attribute 指定渲染一個(gè)元素, <transition-group tag="div"><transition tag="section"> 實(shí)際生成DOM標(biāo)簽divsection 包一層;
  • 過(guò)渡模式下不可用, 因?yàn)槲覀儾辉傧嗷デ袚Q特有的元素
  • 內(nèi)部元素 總是需要提供一個(gè)唯一的 key attribute值
  • CSS過(guò)渡的類(lèi)型將會(huì)應(yīng)用在內(nèi)部的元素中,而不是這個(gè)組/容器本身

列表的移動(dòng)過(guò)渡示例:

<template>
   <!-- 列表的移動(dòng)過(guò)度示例 
   技術(shù)點(diǎn): <transition-group> 組件還有一個(gè)特殊之處除了進(jìn)入和離開(kāi),transition-group還可以為定位的改變添加動(dòng)畫(huà)
         第三方庫(kù): lodash  npm install lodash --S  注意在ts 下 還需要安裝類(lèi)型聲明文件庫(kù) npm i --save-dev @types/lodash
-->
 <div>
    <button @click="random">random</button>
    <transition-group move-class="move" class="wrap" tag="div">
      <div class="item" v-for="item in list" :key="item.id">{{ item.number }}</div>
    </transition-group>
 </div>

</template>
<script setup lang='ts'>
import {ref} from 'vue'
import _ from 'lodash' // 需要安裝聲明文件 npm i -D @types/lodash

let list = ref(Array.apply(null, {length:81} as number[]).map((_, index) => {
    return {
        id: index,
        number: (index % 9) + 1
    }
}))

console.log(list, 'list');
const random = () => {
    list.value = _.shuffle(list.value)
}
</script>
<style scoped lang="scss">
.wrap {
    display: flex;
    flex-wrap: wrap;
    width: calc(25px * 9 + 9px);
    .item {
        width: 25px;
        height: 25px;
        border: 1px solid #ccc;
        display: flex;
        justify-self: center;
        align-items: center;
    }
}
.move {
    transition: all 1s;
}
</style>

狀態(tài)的過(guò)渡:

<template>
   <input type="number" step="20" v-model="num.current">
       <div style="font-size: 30px; margin-left: 20px;">{{ num.tweenedNumber.toFixed() }}
       </div>
</template>
<script setup lang='ts'>
import {reactive, watch} from 'vue'
import gsap from 'gsap'

 const num = reactive({
    current: 0,
    tweenedNumber:0
 })

 watch(() => num.current, (newVal) =>{
    gsap.to(num, {
        duration: 1,
        tweenedNumber: newVal
    })
 })
</script>

3、總結(jié)

主要理解<Transition><TransitionGroup>,同時(shí)結(jié)合動(dòng)畫(huà)庫(kù)來(lái)實(shí)現(xiàn)過(guò)渡效果;

到此這篇關(guān)于Vue3使用transition組件改變DOM屬性的方式小結(jié)的文章就介紹到這了,更多相關(guān)Vue3 transition改變DOM屬性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 快速了解vue-cli 3.0 新特性

    快速了解vue-cli 3.0 新特性

    vue-cli 是 vue 官方團(tuán)隊(duì)推出的一款快速開(kāi)發(fā) vue 項(xiàng)目的構(gòu)建工具,具有開(kāi)箱即用并且提供簡(jiǎn)潔的自定義配置等功能。這篇文章主要介紹了快速了解vue-cli 3.0 新特性,需要的朋友可以參考下
    2018-02-02
  • vue引用CSS樣式實(shí)現(xiàn)手機(jī)充電效果

    vue引用CSS樣式實(shí)現(xiàn)手機(jī)充電效果

    這篇文章主要介紹了vue引用CSS樣式實(shí)現(xiàn)手機(jī)充電效果,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • Vue使用v-for數(shù)據(jù)渲染順序混亂的原因及解決方案

    Vue使用v-for數(shù)據(jù)渲染順序混亂的原因及解決方案

    在 Vue.js 中,使用 v-for 指令進(jìn)行數(shù)據(jù)渲染時(shí),有時(shí)會(huì)遇到渲染順序混亂的問(wèn)題,這種問(wèn)題主要與 Vue 的響應(yīng)式系統(tǒng)、DOM 更新機(jī)制以及數(shù)組的變更方法有關(guān),以下是對(duì)這一現(xiàn)象的深入分析及解決方案,需要的朋友可以參考下
    2025-01-01
  • vue el-upload 上傳文件格式校驗(yàn)方法

    vue el-upload 上傳文件格式校驗(yàn)方法

    這篇文章主要介紹了vue el-upload 上傳文件格式校驗(yàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • 淺析vue3的setup的使用和原理

    淺析vue3的setup的使用和原理

    setup是Vue3中引入的一個(gè)新的組件選項(xiàng),是Vue3中函數(shù)式組件的核心部分,它提供了一種新的方式來(lái)編寫(xiě)組件邏輯,下面就來(lái)和大家講講它的使用和原理
    2023-08-08
  • element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))

    element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))

    開(kāi)發(fā)中有時(shí)候需要input只能輸入數(shù)字,下面這篇文章主要給大家介紹了關(guān)于element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • vue:axios請(qǐng)求本地json路徑錯(cuò)誤問(wèn)題及解決

    vue:axios請(qǐng)求本地json路徑錯(cuò)誤問(wèn)題及解決

    這篇文章主要介紹了vue:axios請(qǐng)求本地json路徑錯(cuò)誤問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 前端架構(gòu)vue動(dòng)態(tài)組件使用基礎(chǔ)教程

    前端架構(gòu)vue動(dòng)態(tài)組件使用基礎(chǔ)教程

    這篇文章主要為大家介紹了前端架構(gòu)vue動(dòng)態(tài)組件使用的基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-02-02
  • 淺談基于Vue.js的移動(dòng)組件庫(kù)cube-ui

    淺談基于Vue.js的移動(dòng)組件庫(kù)cube-ui

    這篇文章主要介紹了基于Vue.js的移動(dòng)組件庫(kù)cube-ui,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 在Vue methods中調(diào)用filters里的過(guò)濾器實(shí)例

    在Vue methods中調(diào)用filters里的過(guò)濾器實(shí)例

    今天小編就為大家分享一篇在Vue methods中調(diào)用filters里的過(guò)濾器實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論