Skip to content

Butterflies

Colorful butterflies flying organically around the canvas. Each butterfly has two bezier-curve wings that flap with a sine animation, and follows a Lissajous-like path for natural-looking flight patterns.

Examples

Basic

Default settings.

<template>
    <EffectDemo>
        <canvas ref="canvasRef"></canvas>
    </EffectDemo>
</template>

<script
    setup
    lang="ts">
    import { onMounted, onUnmounted, ref } from 'vue';
    import { createButterflies } from '@basmilius/sparkle';

    const canvasRef = ref<HTMLCanvasElement>();
    let sim: ReturnType<typeof createButterflies> | null = null;

    onMounted(() => {
        if (canvasRef.value) {
            sim = createButterflies({ count: 12, speed: 1, scale: 1 });
            sim.mount(canvasRef.value).start();
        }
    });

    onUnmounted(() => {
        sim?.destroy();
        sim = null;
    });
</script>

Configuration

All options are passed via a config object:

typescript
import { createButterflies } from '@basmilius/sparkle';

const butterflies = createButterflies({
    count: 12,
    speed: 1,
    size: 20,
    colors: ['#f4a261', '#e76f51', '#e9c46a', '#2a9d8f'],
    scale: 1
});
butterflies.mount(canvas).start();

count

The number of butterflies on screen at once.

typescript
createButterflies({ count: 20 });

speed

Overall speed multiplier for flight and flapping.

typescript
createButterflies({ speed: 1.5 });

size

Base wing size in pixels. Each butterfly has a random size variation applied on top.

typescript
createButterflies({ size: 30 });

colors

Array of CSS color strings used for butterfly wings. Each butterfly picks a random color from this list.

typescript
createButterflies({ colors: ['#ffb7c5', '#c77dff', '#8ecae6'] });

scale

Scales all size-related values proportionally.

typescript
createButterflies({ scale: 1.5 });