Primeros pasos
reelkit es un slider de un solo elemento: se ve un elemento cada vez, como en TikTok, Instagram Reels o Stories. Es ideal para feeds verticales de vídeo, galerías a pantalla completa y contenido que se desliza.
¿Te gusta ReelKit?
Si ReelKit te resulta útil, plantéate darle una estrella en GitHub. Ayuda a que otros desarrolladores encuentren el proyecto y lo mantiene vivo. ¡Gracias, agradezco de verdad tu apoyo!
0.x.x — API inestable
ReelKit está en desarrollo activo. Mientras siga en 0.x.x, la API puede cambiar entre versiones menores sin periodo de obsolescencia. Fija la versión para evitar roturas inesperadas.
Elige tu framework
Pruébalo en línea
Pruébalo en el navegador, sin instalar nada:
Inicio rápido
Slider vertical mínimo con 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>
);
}Inicio rápido
Slider vertical mínimo con 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;
}Inicio rápido
Slider vertical mínimo con 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>Conceptos clave
Reel
El componente Reel es el contenedor principal: gestiona el estado del slider, los gestos táctiles, la navegación con teclado y las animaciones. Renderiza los slides con un patrón de render prop a través de itemBuilder.
itemBuilder
La prop itemBuilder es una función que recibe el índice y devuelve el contenido de cada slide. Este patrón hace posible la virtualización: solo se renderizan los elementos visibles.
ReelIndicator
Componente opcional que muestra indicadores de progreso al estilo de Instagram con la posición actual en el slider.
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>Navegación
Métodos de navegación incluidos:
- Táctil / deslizar: arrastra para navegar con inercia y ajuste al slide
- Teclado: teclas de flecha (los componentes overlay también cierran con Escape)
- Rueda del ratón: se activa con la prop
enableWheel - Por código: usa
apiRefparanext(),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>Siguientes pasos
- Instalación - todos los paquetes y opciones de configuración
- Guía del core - el motor independiente del framework
- Guía del framework - componentes, demos e integraciónGuía del framework - componentes, demos e integraciónGuía del framework - componentes, demos e integración
- Reel Player - reproductor de vídeo al estilo de TikTok/ReelsReel Player - reproductor de vídeo al estilo de TikTok/ReelsReel Player - reproductor de vídeo al estilo de TikTok/Reels
- Lightbox - galería de imágenes y vídeosLightbox - galería de imágenes y vídeosLightbox - galería de imágenes y vídeos
- Stories Player - visor de stories al estilo de InstagramStories Player - visor de stories al estilo de InstagramStories Player - visor de stories al estilo de Instagram