ReelKit

为 TikTok / Instagram Reels 风格 体验打造的单条目滑动器

与框架无关、虚拟化、触摸优先。专为竖向视频流、Stories 浏览器和全屏画廊而生。

React
Angular
Vue

Virtualized

Only 3 slides in DOM

在线演示 —— 点箭头试试

工作原理

一整条信息流。
只有三张幻灯片。

你的信息流可以有成千上万条内容。Reel 只保留当前这张幻灯片和它紧邻的上下两张处于挂载状态。

  1. 1

    备好下一次滑动

    当前这张幻灯片铺满视口。一张邻居在上方候着,另一张在下方。

  2. 2

    在信息流中移动

    向上滑看下一条,向下滑回上一条。已挂载的几张幻灯片一起移动。

  3. 3

    只更新变化的部分

    幻灯片停稳之后,移出范围的那条被卸载,新的邻居被挂载。仍在范围内的保持原样。

在不循环的信息流两端,只需要两张幻灯片。留意演示滑到边缘时,挂载数量的变化。

9 items in the feed3 mounted

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
VIEWPORT
PreviousOffscreen
CurrentVisible
NextOffscreen

Slide 3 of 9

In the DOM: 2, 3, 4

Expanded view · Neighbors are hidden in the actual slider

为性能而生

虚拟化渲染、零依赖、60fps 过渡

3个 DOM 节点

虚拟化

扛得住 10,000+ 条目,任何时刻只渲染 3 张幻灯片。

0依赖

零依赖

没有任何运行时依赖,核心包 gzip 后约 11.2 kB。

60fps

触摸优先

原生手感的滑动手势,带惯性和吸附点。

高性能
键盘导航
与框架无关
TypeScript 优先
无头 + 开箱样式
现成组件
可分享的 URL 状态

为什么叫 “ReelKit”?

Reel —— 指 Instagram Reels 和 TikTok 那样的竖向视频流。一次只看一条内容,滑动切换下一条。

Kit —— 指一组模块化的包。想要完全掌控就用无头的核心包,想快速接入就用框架绑定,想直接上手就用现成的视频播放器和图片画廊浮层。

简洁的 API

几行代码就能跑起来

tsx
import { Reel, ReelIndicator } from '@reelkit/react';

const items = ['Slide 1', 'Slide 2', 'Slide 3'];

function App() {
  return (
    <Reel
      count={items.length}
      size={[400, 600]}
      itemBuilder={(index) => (
        <div className="slide">{items[index]}</div>
      )}
    >
      <ReelIndicator />
    </Reel>
  );
}

可用的包

模块化的生态 —— 需要什么装什么

核心

与框架无关的滑动引擎 —— 虚拟化、手势、键盘、滚轮、信号。零依赖。

React
组件、Hooks 与信号桥接
Angular
基于信号响应式的独立组件
Vue
面向 Vue 3 的组件与组合式函数

准备好开始了吗?

看看文档和示例,动手做出你的第一个滑动器。