快拍栏
信息流顶部的一排圆环:每人一个,有新内容时是彩色的,用户全部看完后变暗。点击圆环会从第一条还没看过的快拍开始播放;下次访问时,即使刷新过页面,也会记得用户看到了哪里。
试一试
每个版本都导入 ./api,它代替你的后端:groups 是用户关注的人以及每人发布的快拍,形状与播放器的 StoriesGroup 相同。把它换成你自己的信息流。
typescript
import { cdnUrl } from '@reelkit/example-data';
// Stands in for your backend: the people a viewer follows and the stories each
// one posted. Each entry has the shape of `StoriesGroup` from the stories
// player of your framework, so the list goes to the player as it is.
export interface Group {
author: { id: string; name: string; avatar: string };
stories: { id: string; mediaType: 'image'; src: string }[];
}
const kPeople = ['Alex', 'Sarah', 'Mike', 'Emma', 'Noah', 'Lena'];
// Uneven on purpose: a person with one story is watched to the end at once,
// one with three can be left part way and resumed.
const kStoryCounts = [3, 1, 2, 3, 1, 2];
const pad = (n: number) => String(n).padStart(2, '0');
const storyImage = (n: number) =>
n <= 6
? cdnUrl(`samples/images/stories/story-00${n}.jpg`)
: cdnUrl(`samples/images/image-${pad(n - 6)}.jpg`);
let nextImage = 1;
export const groups: Group[] = kPeople.map((name, i) => ({
author: {
id: `user-${i + 1}`,
name,
avatar: cdnUrl(`samples/avatars/avatar-${pad(i + 1)}.jpg`),
},
stories: Array.from({ length: kStoryCounts[i] }, (_, j) => ({
id: `user-${i + 1}-story-${j + 1}`,
mediaType: 'image' as const,
src: storyImage(nextImage++),
})),
}));示例媒体只能在 reelkit.dev 上使用
cdnUrl 生成指向 cdn.reelkit.dev 的链接,而它只向 ReelKit 站点提供文件。在你的应用里这些头像和快拍会加载失败,所以复制这个文件之前,先把 avatar 和 src 指向你自己的文件。
StoriesTray.tsx
StoriesTray.vue
stories-tray.component.ts
把某个人的快拍看完再关闭播放器:他的圆环会变暗,焦点落在你最后观看的那个人上,刷新后两者都会保留。"Forget what was seen" 会从头开始。
原理
- 一个控制器同时为两者记忆 ——
createStoriesViewedStateController只创建一次,作为viewed传给圆环列表和播放器。圆环从中读取,播放器把显示过的每条快拍记录进去,控制器再把它保存在localStorage的storageKey之下,所以刷新不会改变任何东西。参见“记住已看内容”:React、Vue 和 Angular。 - 播放器从用户停下的地方继续 —— 有了
viewed,播放器会从某人第一条还没看过的快拍开始;如果全部看过,则从头开始。示例只传入是哪个人,从不传快拍索引;这个问题由控制器的resumeStoryIndex回答,见它的参考文档。 - 圆环只有两种状态 —— 还有内容可看时是彩色的,某人被看完后变暗。某人内部的进度显示在播放器的进度条上,而不是圆环上。参见 StoriesRing。
- 圆环颜色跟随页面 —— 两种状态分别是
--rk-stories-ring-active-gradient和--rk-stories-ring-viewed-color令牌,看完状态默认是为深色页面准备的淡白色。浅色页面请把它设在.rk-stories-ring-list上(本演示在浅色主题下就是这样做的),不要设在:root:播放器的桌面轮播会在深色背景上用同样的令牌绘制圆环。令牌见主题表。 - 控制器不需要额外接线 —— 播放器始终被渲染,用
isOpen打开,所以它会在选择第一条快拍之前自己读取保存的状态。如果只在打开时才挂载它,页面就必须先接上控制器,控制器参考文档对此有说明。 - 焦点回到正确的圆环 —— 播放器关闭时会把焦点还给打开它的圆环,正如它的无障碍部分所述。这发生在关闭处理函数运行之后,所以示例先等待一个任务,再把最后观看的那个人的圆环滚动到可见区域并让它获得焦点。
- 还能保存在别处 ——
storage接受你自己的适配器,例如服务器,这样已看内容就能在不同设备间跟随用户。ttlMs让某个人的记录过期,maxTracks限制保留的人数。它们都在控制器配置中。
下一步
- 无限信息流 - 用户接近信息流末尾时加载更多
- Stories Player - 播放器的每个属性、插槽和组成部分Stories Player - 播放器的每个属性、插槽和组成部分Stories Player - 播放器的每个属性、插槽和组成部分