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

vue3組件庫Shake抖動組件搭建過程詳解

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

正文

先看下效果

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

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

CSS樣式

其實樣式很簡單,當你需要抖動的時候就給它添加個抖動的樣式,不需要就移除這個樣式即可。抖動效果就用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指令會更方便,如下,當我們使用Shake組件時,triggertrue即開始抖動

        <Shake v-model="trigger">
            抖動
        </Shake>

組件具體實現(xiàn)代碼,同樣的這次還是使用setup語法糖形式實現(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語法糖
type Emits = {
    (e: 'update:modelValue', value: boolean): void
}
//獲取props屬性并且設置默認值
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使用了以泛型的形式定義,不了解的可以看下這個傳送門。watch加了立即監(jiān)聽為了防止用戶上來就賦值為true導致下次不觸發(fā)。

單元測試

新建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')
    })
})

這個單元測試的意思其實就是

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

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

導出打包發(fā)布

這里和以往組件實現(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ā)布

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

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

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

相關文章

  • vue中如何通過iframe方式加載本地的vue頁面

    vue中如何通過iframe方式加載本地的vue頁面

    這篇文章主要介紹了vue中如何通過iframe方式加載本地的vue頁面,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue實現(xiàn)生成二維碼的簡單方式

    Vue實現(xiàn)生成二維碼的簡單方式

    與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關于Vue實現(xiàn)生成二維碼的簡單方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Vue+Koa2+mongoose寫一個像素繪板的實現(xiàn)方法

    Vue+Koa2+mongoose寫一個像素繪板的實現(xiàn)方法

    這篇文章主要介紹了Vue+Koa2+mongoose寫一個像素繪板的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    這篇文章主要介紹了Vue2 添加數(shù)據(jù)可視化支持的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • JavaScript的MVVM庫Vue.js入門學習筆記

    JavaScript的MVVM庫Vue.js入門學習筆記

    這篇文章主要介紹了JavaScript的MVVM庫Vue.js入門學習筆記,Vue.js是一個新興的js庫,主要用于實現(xiàn)響應的數(shù)據(jù)綁定和組合的視圖組件,需要的朋友可以參考下
    2016-05-05
  • Vue中的Props(不可變狀態(tài))

    Vue中的Props(不可變狀態(tài))

    這篇文章主要介紹了Vue中的Props(不可變狀態(tài)),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • vue elementui 實現(xiàn)搜索欄公共組件封裝的實例代碼

    vue elementui 實現(xiàn)搜索欄公共組件封裝的實例代碼

    這篇文章主要介紹了vue elementui 搜索欄公共組件封裝,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • vue移動端路由切換實例分析

    vue移動端路由切換實例分析

    本篇文章給大家分享了vue移動端路由切換實例以及相關知識點,對此有興趣的朋友可以參考學習下。
    2018-05-05
  • Vue 如何追蹤數(shù)據(jù)變化

    Vue 如何追蹤數(shù)據(jù)變化

    這篇文章主要介紹了Vue 如何追蹤數(shù)據(jù)變化,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-04-04
  • 使用vue-cli編寫vue插件的方法

    使用vue-cli編寫vue插件的方法

    本篇文章主要介紹了使用vue-cli編寫vue插件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論