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

vue3組件庫(kù)Shake抖動(dòng)組件搭建過程詳解

 更新時(shí)間:2022年10月19日 09:06:01   作者:東方小月  
這篇文章主要為大家介紹了vue3組件庫(kù)Shake抖動(dòng)組件搭建過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

先看下效果

其實(shí)就是個(gè)抖動(dòng)效果組件,實(shí)現(xiàn)起來也非常簡(jiǎn)單。之所以做這樣一個(gè)組件是為了后面寫Form表單的時(shí)候會(huì)用到它做一個(gè)規(guī)則校驗(yàn),比如下面一個(gè)簡(jiǎn)單的登錄頁(yè)面,當(dāng)點(diǎn)擊登錄會(huì)提示用戶哪個(gè)信息沒輸入,當(dāng)然這只是一個(gè)簡(jiǎn)陋的demo

接下來就開始我們的Shake組件實(shí)現(xiàn)

CSS樣式

其實(shí)樣式很簡(jiǎn)單,當(dāng)你需要抖動(dòng)的時(shí)候就給它添加個(gè)抖動(dòng)的樣式,不需要就移除這個(gè)樣式即可。抖動(dòng)效果就用CSS3中的transform的平移屬性即可

@keyframes shake {
    10%,
    90% {
        transform: translate3d(-1px, 0, 0);
    }
    20%,
    80% {
        transform: translate3d(2px, 0, 0);
    }
    30%,
    70% {
        transform: translate3d(-4px, 0, 0);
    }
    40%,
    60% {
        transform: translate3d(4px, 0, 0);
    }
    50%,
    50% {
        transform: translate3d(-4px, 0, 0);
    }
}
.k-shake.k-shakeactive {
    animation: shake 1s linear;
}

組件邏輯

根據(jù)上面效果,很顯然是需要用到插槽slot的,做到用戶傳什么我們就抖什么,做到萬物皆可抖。

這里使用vue3中的v-model指令會(huì)更方便,如下,當(dāng)我們使用Shake組件時(shí),triggertrue即開始抖動(dòng)

        <Shake v-model="trigger">
            抖動(dòng)
        </Shake>

組件具體實(shí)現(xiàn)代碼,同樣的這次還是使用setup語(yǔ)法糖形式實(shí)現(xiàn)

<template>
    <div class="k-shake" :class="{['k-shakeactive']:props.modelValue}">
        <slot />
    </div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import './style/index.less'
export default defineComponent({
    name: 'k-shake'
});
</script>
<script lang='ts' setup>
import { watch } from 'vue'
//v-model傳來的值即為modelValue
type ShakeProps = {
    modelValue?: boolean
}
//發(fā)送update:modelValue來配合v-model語(yǔ)法糖
type Emits = {
    (e: 'update:modelValue', value: boolean): void
}
//獲取props屬性并且設(shè)置默認(rèn)值
const props = withDefaults(defineProps<ShakeProps>(), {
    modelValue: false
})
const emits = defineEmits<Emits>()
//監(jiān)聽modelValue,為true的話,1s后置為false
watch(() => props.modelValue, (newVal) => {
    if (newVal) {
        setTimeout(() => {
            emits("update:modelValue", false)
        }, 1000);
    }
}, { immediate: true })
</script>

說明

這里接收參數(shù)props以及事件emits使用了以泛型的形式定義,不了解的可以看下這個(gè)傳送門。watch加了立即監(jiān)聽為了防止用戶上來就賦值為true導(dǎo)致下次不觸發(fā)。

單元測(cè)試

新建shake.test.ts

import { describe, expect, it } from "vitest";
import { mount } from '@vue/test-utils'
import shake from '../shake.vue'
// The component to test
describe('test shake', () => {
    it("should render slot", () => {
        const wrapper = mount(shake, {
            slots: {
                default: 'Hello world'
            }
        })
        // Assert the rendered text of the component
        expect(wrapper.text()).toContain('Hello world')
    })
    it("should have class", () => {
        const wrapper = mount(shake, {
            props: {
                modelValue: true
            }
        })
        expect(wrapper.classes()).toContain('k-shakeactive')
    })
})

這個(gè)單元測(cè)試的意思其實(shí)就是

  • slot傳入Hello world,期望頁(yè)面就會(huì)出現(xiàn)Hello world
  • props傳入modelValuetrue,那么組件就包含樣式k-shakeactive

最后執(zhí)行pnpm run coverage命令就會(huì)放下shake測(cè)試代碼通過了

導(dǎo)出打包發(fā)布

這里和以往組件實(shí)現(xiàn)基本一樣了,這里直接貼代碼

  • shake/index.ts
import shake from './shake.vue'
import { withInstall } from '@kitty-ui/utils'
const Shake = withInstall(shake)
export default Shake
  • src/index.ts
export { default as Button } from './button'
export { default as Icon } from './icon'
export { default as Link } from './link'
export { default as Upload } from './upload'
export { default as Shake } from './shake'

最后執(zhí)行

pnpm run build:kitty
pnpm run pnpm run build:kitty

即可完成發(fā)布

組件庫(kù)的所有實(shí)現(xiàn)細(xì)節(jié)都在這個(gè)專欄里,包括環(huán)境搭建,自動(dòng)打包發(fā)布,文檔搭建vitest單元測(cè)試等等。

開源地址 kitty-ui: Vite+Ts搭建的Vue3組件庫(kù)

以上就是vue3組件庫(kù)Shake抖動(dòng)組件搭建過程詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3 Shake抖動(dòng)組件庫(kù)搭建的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue router帶參數(shù)頁(yè)面刷新或回退參數(shù)消失的解決方法

    vue router帶參數(shù)頁(yè)面刷新或回退參數(shù)消失的解決方法

    這篇文章主要介紹了vue router帶參數(shù)頁(yè)面刷新或回退參數(shù)消失的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • vue使用Echart線柱混合圖排坑記錄

    vue使用Echart線柱混合圖排坑記錄

    這篇文章主要為大家介紹了vue使用Echart線柱混合圖排坑記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Vue3中使用vuex4的實(shí)現(xiàn)示例

    Vue3中使用vuex4的實(shí)現(xiàn)示例

    本文主要介紹了Vue3中使用vuex4的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 使用vue自定義指令開發(fā)表單驗(yàn)證插件validate.js

    使用vue自定義指令開發(fā)表單驗(yàn)證插件validate.js

    今天就來介紹一下如何利用vue的自定義指令directive來開發(fā)一個(gè)表單驗(yàn)證插件的過程,需要的朋友可以參考下
    2019-05-05
  • 詳解Vue This$Store總結(jié)

    詳解Vue This$Store總結(jié)

    這篇文章主要介紹了詳解Vue This$Store總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解vue中router-view組件的生成原理

    詳解vue中router-view組件的生成原理

    在vue的使用過程中,有一個(gè)組件,幾乎是必用的,那就是router-view,它是所有組件的入口,是單頁(yè)面系統(tǒng)的一把利劍,如果你的系統(tǒng)是火箭,那么router-view無疑將是這艘火箭的北斗衛(wèi)星,本文將給大家介紹vue中的router-view組件是如何生成的,感興趣的朋友可以參考下
    2024-01-01
  • vue awesome swiper異步加載數(shù)據(jù)出現(xiàn)的bug問題

    vue awesome swiper異步加載數(shù)據(jù)出現(xiàn)的bug問題

    這篇文章主要介紹了vue awesome swiper異步加載數(shù)據(jù)出現(xiàn)的bug問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Vue-CLI與Vuex使用方法實(shí)例分析

    Vue-CLI與Vuex使用方法實(shí)例分析

    這篇文章主要介紹了Vue-CLI與Vuex使用方法,結(jié)合實(shí)例形式分析了Vue-CLI創(chuàng)建項(xiàng)目與Vuex相關(guān)概念、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Vue?先初始化父組件再初始化子組件的方法(自定義父子組件mounted執(zhí)行順序)

    Vue?先初始化父組件再初始化子組件的方法(自定義父子組件mounted執(zhí)行順序)

    這篇文章主要介紹了Vue?先初始化父組件再初始化子組件的方法(自定義父子組件mounted執(zhí)行順序),本篇內(nèi)容內(nèi)容主要講述了,在使用?Konva?進(jìn)行開發(fā)過程中遇到的一些問題,需要的朋友可以參考下
    2024-07-07
  • Vue遞歸組件+Vuex開發(fā)樹形組件Tree--遞歸組件的簡(jiǎn)單實(shí)現(xiàn)

    Vue遞歸組件+Vuex開發(fā)樹形組件Tree--遞歸組件的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章也是我自己開發(fā)的從無到有的過程,所以它可以為你提供一些Tree組件開發(fā)的思路,本文重點(diǎn)給大家介紹vue遞歸組件的簡(jiǎn)單實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2019-04-04

最新評(píng)論

盐山县| 云梦县| 奎屯市| 张家港市| 唐山市| 天等县| 广东省| 凉城县| 信丰县| 山东省| 杭州市| 乌兰县| 襄汾县| 梁河县| 大渡口区| 余庆县| 绍兴县| 泽州县| 教育| 剑川县| 那曲县| 绥宁县| 左权县| 富顺县| 上林县| 德昌县| 韶关市| 蒙山县| 当雄县| 曲水县| 屯昌县| 嘉义县| 宝应县| 文昌市| 泸溪县| 静乐县| 仪征市| 荣成市| 柳江县| 广汉市| 光泽县|