Початок роботи
reelkit — це слайдер по одному елементу — на екрані видно один елемент, як у TikTok, Instagram Reels чи Stories. Ідеально для вертикальних відеострічок, повноекранних галерей і вмісту, який гортають свайпом.
Подобається ReelKit?
Якщо ReelKit є корисним для вас, поставте йому зірку на GitHub. Так інші розробники легше зможуть знайти проєкт, а це допоможе у подальшому його розвитку. Дякую, я щиро ціную вашу підтримку!
0.x.x — Unstable API
ReelKit активно розробляється. Поки версія 0.x.x, API може змінюватися між мінорними випусками без періоду застарівання. Фіксуйте версію, щоб нічого несподівано не зламалося.
Оберіть свій фреймворк
Спробувати онлайн
Спробуйте просто в браузері, без встановлення:
Швидкий старт
Мінімальний вертикальний слайдер на React:
import { Reel, ReelIndicator } from '@reelkit/react';
const items = [
{ id: 1, title: 'Slide 1', color: '#6366f1' },
{ id: 2, title: 'Slide 2', color: '#8b5cf6' },
{ id: 3, title: 'Slide 3', color: '#ec4899' },
];
function App() {
return (
<Reel
count={items.length}
size={[400, 600]}
direction="vertical"
enableWheel
itemBuilder={(index) => (
<div
style={{
width: '100%',
height: '100%',
background: items[index].color,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '2rem',
color: 'white',
}}
>
{items[index].title}
</div>
)}
>
<ReelIndicator />
</Reel>
);
}Швидкий старт
Мінімальний вертикальний слайдер на Angular:
import { Component } from '@angular/core';
import {
ReelComponent,
ReelIndicatorComponent,
RkReelItemDirective,
} from '@reelkit/angular';
const items = [
{ id: 1, title: 'Slide 1', color: '#6366f1' },
{ id: 2, title: 'Slide 2', color: '#8b5cf6' },
{ id: 3, title: 'Slide 3', color: '#ec4899' },
];
@Component({
standalone: true,
imports: [ReelComponent, ReelIndicatorComponent, RkReelItemDirective],
template: `
<rk-reel [count]="items.length" [size]="[400, 600]"
direction="vertical" [enableWheel]="true">
<ng-template rkReelItem let-i let-size="size">
<div [style.width.px]="size[0]" [style.height.px]="size[1]"
[style.background]="items[i].color"
style="display:flex;align-items:center;justify-content:center;
font-size:2rem;color:#fff">
{{ items[i].title }}
</div>
</ng-template>
<rk-reel-indicator />
</rk-reel>
`,
})
export class AppComponent {
readonly items = items;
}Швидкий старт
Мінімальний вертикальний слайдер на Vue:
<script setup lang="ts">
import { Reel, ReelIndicator } from '@reelkit/vue';
const items = [
{ id: 1, title: 'Slide 1', color: '#6366f1' },
{ id: 2, title: 'Slide 2', color: '#8b5cf6' },
{ id: 3, title: 'Slide 3', color: '#ec4899' },
];
</script>
<template>
<Reel
:count="items.length"
:size="[400, 600]"
direction="vertical"
enable-wheel
>
<template #item="{ index, size }">
<div
:style="{
width: size[0] + 'px',
height: size[1] + 'px',
background: items[index].color,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '2rem',
color: '#fff',
}"
>
{{ items[index].title }}
</div>
</template>
<ReelIndicator />
</Reel>
</template>Ключові поняття
Reel
Компонент Reel — головний контейнер: він тримає стан слайдера, обробляє дотикові жести, навігацію з клавіатури та анімації. Для рендерингу слайдів використовує патерн render prop через itemBuilder .
itemBuilder
Пропс itemBuilder — функція, яка отримує індекс і повертає вміст слайда. Саме цей патерн дає віртуалізацію: рендеряться лише видимі елементи.
ReelIndicator
Необов’язковий компонент, що показує індикатори прогресу в стилі Instagram із поточною позицією в слайдері.
import { Reel, ReelIndicator } from '@reelkit/react';
function App() {
return (
<Reel
count={items.length}
size={[400, 600]}
itemBuilder={(index) => <Slide data={items[index]} />}
>
<ReelIndicator />
</Reel>
);
}<rk-reel [count]="items.length" [size]="[400, 600]">
<ng-template rkReelItem let-index>
<app-slide [data]="items[index]" />
</ng-template>
<rk-reel-indicator />
</rk-reel><Reel :count="items.length" :size="[400, 600]">
<template #item="{ index }">
<Slide :data="items[index]" />
</template>
<ReelIndicator />
</Reel>Навігація
Вбудовані способи навігації:
- Дотик / свайп: Тягніть, щоб гортати — з інерцією та прилипанням
- Клавіатура: Стрілки (оверлейні компоненти ще обробляють Escape для закриття)
- Колесо миші: Ув імкніть
enableWheelу пропсах - Програмно: Використовуйте
apiRefдляnext(),prev(),goTo()
import { useRef } from 'react';
import { Reel, type ReelApi } from '@reelkit/react';
function App() {
const apiRef = useRef<ReelApi>(null);
return (
<>
<Reel
count={10}
size={[400, 600]}
apiRef={apiRef}
itemBuilder={(index) => <Slide index={index} />}
/>
<button onClick={() => apiRef.current?.prev()}>Prev</button>
<button onClick={() => apiRef.current?.next()}>Next</button>
<button onClick={() => apiRef.current?.goTo(5)}>Go to 5</button>
</>
);
}<rk-reel
[count]="10"
[size]="[400, 600]"
(apiReady)="reelApi = $event"
>
<ng-template rkReelItem let-index>
<app-slide [index]="index" />
</ng-template>
</rk-reel>
<button (click)="reelApi?.prev()">Prev</button>
<button (click)="reelApi?.next()">Next</button>
<button (click)="reelApi?.goTo(5)">Go to 5</button><script setup lang="ts">
import { ref } from 'vue';
import { Reel, type ReelExpose } from '@reelkit/vue';
const reelRef = ref<InstanceType<typeof Reel> & ReelExpose>();
</script>
<template>
<Reel ref="reelRef" :count="10" :size="[400, 600]">
<template #item="{ index }">
<Slide :index="index" />
</template>
</Reel>
<button @click="reelRef?.prev()">Prev</button>
<button @click="reelRef?.next()">Next</button>
<button @click="reelRef?.goTo(5)">Go to 5</button>
</template>Наступні кроки
- Встановлення - усі пакети та варіанти налаштування
- Посібник з ядра - рушій без прив’язки до фреймворку
- Посібник для фреймворку - компоненти, демо та інтеграціяПосібник для фреймворку - компоненти, демо та інтеграціяПосібник для фреймворку - компоненти, демо та інтеграція
- Reel Player - відеоплеєр у стилі TikTok / ReelsReel Player - відеоплеєр у стилі TikTok / ReelsReel Player - відеоплеєр у стилі TikTok / Reels
- Lightbox - галерея зображень і відеоLightbox - галерея зображень і відеоLightbox - галерея зображень і відео
- Stories Player - переглядач історій у стилі InstagramStories Player - переглядач історій у стилі InstagramStories Player - переглядач історій у стилі Instagram