塞滿嘴包裝器 wrapper
讓粉紅惡魔來幫你吃掉畫面上的一切。( ͡• ͜ʖ ͡• )
在《星之卡比 探索發現》中,卡比不只可以吃掉敵人,還可以吃掉各類物品,例如汽車、自動販賣機等等。
粉紅惡魔再度進化惹!ᕕ( ゚ ∀。)ᕗ
不得不說這個能力看起來真的有夠ㄎㄧㄤ,玩得時候笑到不行。
使用範例
基本用法
改變 isMouthful 參數即可召喚粉紅惡魔卡比來幫你吃掉畫面上的東西。
🐟
鱈魚
一隻熱愛程式的魚,但是沒有手指可以打鍵盤,更買不到能在水裡用的電腦。
( ´•̥̥̥ ω •̥̥̥` )
( ´•̥̥̥ ω •̥̥̥` )
查看範例原始碼
vue
<template>
<div class="w-full flex flex-col items-center justify-center gap-10 p-6">
<wrapper-kirby-mouthful-mode :is-mouthful="isMouthful">
<div class="flex flex-col gap-4 border rounded">
<base-checkbox
v-model="isMouthful"
class="p-4"
label="召喚卡比"
/>
</div>
</wrapper-kirby-mouthful-mode>
<wrapper-kirby-mouthful-mode
:is-mouthful="isMouthful"
:body-rounded="9999"
:mouth-rounded="9999"
>
<img
src="/profile.webp"
class="w-60 border-[0.5rem] border-white rounded-full object-cover shadow-xl"
>
</wrapper-kirby-mouthful-mode>
<wrapper-kirby-mouthful-mode :is-mouthful="isMouthful">
<div class="relative overflow-hidden border rounded bg-slate-100 p-6">
<div class="icon">
<div class="fish">
🐟
</div>
</div>
<div class="text-center text-xl font-bold">
鱈魚
</div>
<div class="mt-2">
一隻熱愛程式的魚,但是沒有手指可以打鍵盤,更買不到能在水裡用的電腦。<br>( ´•̥̥̥ ω •̥̥̥` )
</div>
</div>
</wrapper-kirby-mouthful-mode>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import BaseCheckbox from '../../base-checkbox.vue'
import WrapperKirbyMouthfulMode from '../wrapper-kirby-mouthful-mode.vue'
const isMouthful = ref(false)
</script>
<style scoped lang="sass">
.icon
position: absolute
right: 0rem
bottom: 0rem
font-size: 14rem
line-height: 10rem
filter: brightness(0)
transform: translate(14%, 60%) rotate(10deg)
opacity: 0.04
.fish
animation: float 3s infinite ease-in-out
@keyframes float
0%, 100%
transform: translate(0%)
50%
transform: translate(-5%, 2%) rotate(5deg)
</style>
卡比小夥伴
調整顏色,讓卡比的朋友們一起大吃特吃吧!ლ(´∀`ლ)
塞滿嘴
塞滿嘴
塞滿嘴
塞滿嘴
查看範例原始碼
vue
<template>
<div class="w-full flex flex-col items-center justify-center gap-10 border border-gray-300 py-10">
<div class="flex items-center border border-gray-300 rounded p-10">
<input
v-model="mainColor"
type="color"
>
<input
v-model="blushColor"
type="color"
>
<wrapper-kirby-mouthful-mode
is-mouthful
:main-color="mainColor"
:blush-color="blushColor"
:body-rounded="9999"
class="ml-10"
>
<div
class="rounded px-8 py-11"
v-text="`塞滿嘴`"
/>
</wrapper-kirby-mouthful-mode>
</div>
<wrapper-kirby-mouthful-mode
v-for="item, i in list"
:key="i"
is-mouthful
v-bind="item"
:body-rounded="9999"
:mouth-rounded="9999"
@mouseenter="onMouseenter(item)"
@mouseleave="onMouseleave(item)"
>
<div
class="rounded px-8 py-11 text-xl"
v-text="`塞滿嘴`"
/>
</wrapper-kirby-mouthful-mode>
</div>
</template>
<script setup lang="ts">
import type { Writable } from 'type-fest'
import { ref } from 'vue'
import WrapperKirbyMouthfulMode from '../wrapper-kirby-mouthful-mode.vue'
type Param = Writable<InstanceType<typeof WrapperKirbyMouthfulMode>['$props']>
const mainColor = ref('#FF9DC0')
const blushColor = ref('#FF639B')
const list = ref<Param[]>([
{
isMouthful: true,
mainColor: '#ffea08',
blushColor: '#fcb423',
},
{
isMouthful: true,
mainColor: '#5fd42c',
blushColor: '#378c12',
},
{
isMouthful: true,
mainColor: '#f72a2a',
blushColor: '#8f003e',
},
])
function onMouseenter(param: Param) {
param.isMouthful = false
}
function onMouseleave(param: Param) {
param.isMouthful = true
}
</script>
原理
使用 SVG 繪製卡比主體,透過 anime.js 控制動畫。
📚 anime.js
這裡使用了 SVG Mask 的技巧,切割出卡比的嘴巴,實現卡比吃掉元素的效果。
原始碼
API
Props
interface Props {
/** 是否塞滿嘴 */
isMouthful?: boolean;
/** 卡比皮膚的厚度。單位 px
*
* @default 10
*/
thickness?: number;
/** 主色 */
mainColor?: string;
/** 腮紅顏色 */
blushColor?: string;
/** 身體圓角 */
bodyRounded?: number;
/** 嘴巴圓角 */
mouthRounded?: number;
}