最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue transition實現(xiàn)點贊動畫效果的示例

 更新時間:2021年05月12日 14:52:03   作者:七分小熊貓  
點贊動畫是網(wǎng)頁評論中常見的功能,本文將介紹如何用vue實現(xiàn)這一效果。點贊時愛心縮小變大,變大時略微大一點再變正常,取消點贊時愛心無動畫,同時數(shù)字滾動,+1 時向上滾動,-1 時向下滾動

效果一覽

愛心效果

材料:愛心圖標(biāo)兩個,沒有我這種 icon 組件的用 png 圖片代替

<transition :name=" isLike ? 'zoom' : '' " mode="out-in">
    <!-- 愛心圖標(biāo) -->
    <icon data="@icon/like.svg" color="#FF0000" v-if="isLike" key="like"></icon>
    <icon data="@icon/unlike.svg" color="#333333" v-else key="unlike"></icon>
</transition>

因為在點贊時有動畫,取消點贊不要動畫,所以 transition 的 name 屬性需要根據(jù) isLike 變量變化,當(dāng) isLiketrue 時,給他 zoom 動畫,否則不給動畫。動畫模式是 out-in 即先出后進(jìn)。原來的圖標(biāo)先從大變小,然后新圖標(biāo)再從小變大。

這里注意當(dāng)兩個切換的組件名稱一致時,需要加 key 屬性,以區(qū)分兩個組件,否則動畫不會生效

接下來寫 css

/** 動畫進(jìn)行時的class **/
.zoom-enter-active, .zoom-leave-active {
    transition: all .15s cubic-bezier(0.42, 0, 0.34, 1.55);
}

/** 設(shè)置進(jìn)場開始的狀態(tài)和離場結(jié)束的狀態(tài),都是縮放到0 **/
.zoom-enter, .zoom-leave-to {
    transform: scale(0);
}

/** 設(shè)置進(jìn)場結(jié)束的狀態(tài)和離場開始的狀態(tài), 都是縮放到1 **/
.zoom-enter-to, .zoom-leave {
    transform: scale(1);
}

根據(jù)官方文檔描述,.name-enter-active 和 .name-leave-active 會在動畫進(jìn)行時設(shè)置到 icon 組件的 class 中,所以這里我們設(shè)置 transition 的動畫屬性,時間以及曲線。

因為我們需要在放大時略微比 scale(1) 要大一點再回到正常大小,所以要自定義動畫曲線 cubic-bezier(0.42, 0, 0.34, 1.55) 。這個曲線怎么來的呢?

打開 chrome 的調(diào)試面板,隨便找個 dom 設(shè)置 transition-timing-function: ease; 然后點擊 ease 旁邊的曲線小圖標(biāo)

拖動拉桿就可以調(diào)整曲線

在動畫快結(jié)尾的時候,使曲線超出結(jié)束點即可。

然后復(fù)制曲線面板下面的值 cubic-bezier(0.25, 0.1, 0.27, 1.32) 即可。

更多關(guān)于動畫時間曲線的知識,這里就不贅述了,網(wǎng)上有很多相關(guān)知識。

關(guān)于縮放部分,按照上述 css 設(shè)定以及 mode="out-in" 動畫模式是先出后進(jìn),在點贊時。

  1. 原來的愛心開始離場,此時原來愛心縮放狀態(tài)為 1,即大小的 100%
  2. 愛心離場動畫進(jìn)行中,此時開始從 1 縮放到 0,即大小的 0%
  3. 原愛心離場完成,新愛心開始進(jìn)場,此時新愛心縮放狀態(tài)為 0
  4. 新愛心進(jìn)場動畫進(jìn)行中,此時開始從 0 動畫縮放到結(jié)束狀態(tài) 1

當(dāng)取消點贊的時候,isLikefalse,transition 的 name 就等于空字符串,此時就不會有動畫了。

數(shù)字滾動動畫

因為只是數(shù)字的變化,因此 transition 里只需要一個 div 即可。只是要注意 div 設(shè)置 key,以標(biāo)識數(shù)據(jù)變動。

<div class="like-num-wrapper">
    <transition :name="item.is_like ? 'plus' : 'minus'">
        <div
                class="like-num"
                :style="{color: item['is_like'] ? 'red': '#333'}"
                :key="item['like_num']"
        >
            {{item['like_num']}}
        </div>
    </transition>
</div>
  .like-num-wrapper {
    position: relative;
    margin-left: 16px;
    text-align: end;
    font-size: 13px;
    height: 17px;
    overflow-y: hidden;

    .like-num {
      top: 0;
      left: 0;
      position: relative;
      line-height: 17px;
    }
  }

需要注意我們?yōu)榱撕糜嬎闵舷聺L動的距離,所以需要把數(shù)字的高度定死在 17px,接下來寫 transition 的動畫 class。我們通過點贊狀態(tài)來判斷應(yīng)該用那一套動畫,點贊時 transition 的 name 是 plus ,取消點贊時是 minus 。

// 點贊數(shù)字+1動畫
.plus-enter-active, .plus-leave-active {
  transition: all .3s ease-in;
}

.plus-enter, .plus-leave {
  transform: translateY(0);
}

.plus-enter-to, .plus-leave-to {
  transform: translateY(-17px);
}

// 點贊數(shù)字-1動畫
.minus-enter-active, .minus-leave-active {
  transition: all .3s ease-in;
}

.minus-enter {
  transform: translateY(-34px);
}

.minus-enter-to {
  transform: translateY(-17px);
}

.minus-leave {
  transform: translateY(0);
}

.minus-leave-to {
  transform: translateY(17px);
}

點贊動畫

點贊動畫很簡單,在點贊時會在老的數(shù)字div下面生成一個新數(shù)字div。此時只需要讓他們都往上移動 17px 即可。

因為取消點贊是數(shù)字從上往下滾動,所以需要讓數(shù)字 1 的初始位置在 2 上面。所以寫出如下代碼,設(shè)定數(shù)字 1 的動畫初始位置

.minus-enter {
  transform: translateY(-34px);
}

為什么是 -34px ?因為數(shù)字div的高度是 17px 往上移 17px 會和 2 重疊,那么數(shù)字 1 再往上移動 17px 就會出現(xiàn)在 2 的上面。-17-17 = 34 這一切都發(fā)生在電光火石之間。

接下來在 .minus-enter-to 中位移到 -17px 就可以實現(xiàn) 1 往下滾動到 2 這個效果了。

數(shù)字 2 的離場動畫就簡單多了 直接從 0 到 17px 就可以滾出去了。

至此整個點贊效果就完成了

以上就是Vue transition實現(xiàn)點贊動畫效果的示例的詳細(xì)內(nèi)容,更多關(guān)于vue transition實現(xiàn)點贊效果的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vite環(huán)境變量.env文件的配置及使用

    vite環(huán)境變量.env文件的配置及使用

    在Vite中,我們可以使用環(huán)境變量來管理不同環(huán)境下的配置,本文主要介紹了vite環(huán)境變量.env文件的配置及使用,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 使用vue3+ts打開echarts的正確方式

    使用vue3+ts打開echarts的正確方式

    這篇文章主要給大家介紹了關(guān)于使用vue3+ts打開echarts的正確方式,在Vue3中使用ECharts組件可以方便地創(chuàng)建各種數(shù)據(jù)可視化圖表,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • vue如何解決watch和methods值執(zhí)行順序問題

    vue如何解決watch和methods值執(zhí)行順序問題

    這篇文章主要介紹了vue如何解決watch和methods值執(zhí)行順序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue3響應(yīng)式Proxy與Reflect的理解及基本使用實例詳解

    vue3響應(yīng)式Proxy與Reflect的理解及基本使用實例詳解

    這篇文章主要為大家介紹了vue3響應(yīng)式Proxy與Reflect的理解及基本使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • axios請求中斷的幾種方法

    axios請求中斷的幾種方法

    在實際應(yīng)用場景中,假如有一個下載或者導(dǎo)出請求,數(shù)據(jù)量非常大的情況下,接口響應(yīng)的會很慢,這時候我我們想中斷請求,該怎么做呢?本文給大家介紹了axios請求中斷的幾種方法,需要的朋友可以參考下
    2024-10-10
  • 淺析Vue3中Excel下載模板并導(dǎo)入數(shù)據(jù)功能的實現(xiàn)

    淺析Vue3中Excel下載模板并導(dǎo)入數(shù)據(jù)功能的實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Vue3中的Excel數(shù)據(jù)管理,即下載模板并導(dǎo)入數(shù)據(jù)功能的實現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2024-05-05
  • vue組件中的樣式屬性scoped實例詳解

    vue組件中的樣式屬性scoped實例詳解

    vue組件中的style標(biāo)簽標(biāo)有scoped屬性時表明style里的css樣式只適用于當(dāng)前組件元素 。接下來通過本文給大家分享vue組件中的樣式屬性scoped實例詳解,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • 解決vant中 tab欄遇到的坑 van-tabs

    解決vant中 tab欄遇到的坑 van-tabs

    這篇文章主要介紹了解決vant中 tab欄遇到的坑 van-tabs,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue實現(xiàn)自定義多選按鈕

    vue實現(xiàn)自定義多選按鈕

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)自定義多選按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 在vue組件中使用axios的方法

    在vue組件中使用axios的方法

    下面小編就為大家分享一篇在vue組件中使用axios的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

正阳县| 大港区| 铜陵市| 甘泉县| 陇川县| 尖扎县| 十堰市| 沽源县| 特克斯县| 南丹县| 武乡县| 牡丹江市| 娄烦县| 邯郸县| 封丘县| 峡江县| 津市市| 铜梁县| 都匀市| 鹿泉市| 乌拉特中旗| 皋兰县| 鄄城县| 沙雅县| 清远市| 龙山县| 罗定市| 崇义县| 临朐县| 澳门| 贵州省| 合阳县| 兴安县| 临安市| 青河县| 徐水县| 邹城市| 延吉市| 吉林市| 白水县| 五常市|