在非 AMP 站点上使用 Web Story Player 创建 Web Story 体验
什么是 Web Story Player?

Web Story Player 是您在网站上使用 Web Stories 为用户提供丰富用户体验的最佳方式。把它想象成一个视频播放器:在您的设备中拥有一个视频很好,但把它放在网络上的视频播放器中,它会解锁许多功能和好处:有额外的控件(例如字幕),它与数百万其他视频一起存在,可以在原始视频的末尾提供相关内容——这增加了可发现性等等。
您可以类似地思考 Web Story Player。仅链接到一个故事,您可能会错过其他故事平台(例如 Instagram、Snapchat)中发现的许多功能和体验,这些功能和体验对于故事用户来说是自然的。请参阅下表中的一些示例。
单个故事 | Web Story Player | |
更丰富的用户体验 | ||
向下滑动退出故事并返回您的站点 | ❌ | ✅ |
滑动到下一个/上一个故事 | ❌ | ✅ |
相同站点的入口点 | ❌ | ✅ |
自定义能力 | ||
自定义事件(例如在故事之间导航) | ❌ | ✅ |
额外的 UI 控件 | ❌ | ✅ |
为故事添加署名 | ❌ | ✅ |
以编程方式获取更多故事 | ❌ | ✅ |
自定义行为(例如循环包装) | ❌ | ✅ |
常见实现方式
您可以使用 Web Story Player 在您自己的平台上创建许多体验,从轮播到单张卡片,再到将故事直接嵌入到页面中。我们已经开发了一个详细的 UX 指南,其中包含与这些示例相关的最佳实践。我们推荐的最常见的模式是轮播。我们将概述创建此类体验的最佳实践,但您应该可以自由地尝试并实施最适合您用例的方案。我们将在未来几周分享更广泛的 UX 模式列表。
轮播(UX 详情)
一个故事轮播有多个故事彼此相邻。它通常包括故事的预览,如缩略图和标题。单击后,它将打开故事。然后,用户可以浏览故事或在故事之间滑动。
此示例中的重要方面
- 在桌面上
- 在移动设备上
- 支持滑动以在故事之间导航
- “滚动背景页面”被禁用,以便将该手势用于滑动关闭
- 入口点卡片比桌面尺寸小
- 没有背景卡片(因为移动设备中没有悬停)
- 启用向下滑动以关闭故事
- 在两种屏幕尺寸上
- 播放器开始时暂停,只有在用户单击入口点后才开始播放。
- 轮播遵循播放手册中的 UX 最佳实践。
要查看构建此功能所需的完整代码,请访问codepen 项目。
向播放器添加故事
有三种主要方法可以将故事添加到播放器。
- 将它们声明为播放器 HTML 中的锚标记。
- 使用获取行为从端点获取更多故事。
- 使用 add() API 添加一个或多个故事。
如果您只想在播放器中显示一组静态故事,则最佳选择是 (1)。但是,如果您想动态添加故事,可以使用选项 (2) 或 (3)。
显示故事
在播放器中显示和添加故事的最简单方法是在<amp-story-player>
元素所在 HTML 中直接将其声明为<a>
标记。请参阅指南的“显示 Web Story”部分中的代码示例。
从端点获取更多故事
当用户在 Web Story Player 中导航时,您可以创建“无限滚动”体验。为此,请包含fetch 操作并在 JSON 配置中指定端点。当用户接近最后加载的故事时,播放器会自动获取更多故事。您可以通过设置后端个性化系统并使用fetch
操作来为用户自定义获取的故事。
使用 add() API 添加故事
您可以使用add() API手动添加一个或多个故事。
可自定义的 UI
播放器解锁了许多功能,允许您自定义系统显示的 UI。除了控件之外,您还可以在播放器中为故事添加署名,以便用户知道他们当前正在与之交互的故事是由谁发布的。
为创建者/发布者添加署名
故事顶部的创建者标题
故事署名显示实体或发布者的名称和徽标。单击后,它会将用户导航到实体的 URL 或发布者的规范域。
要在故事上显示署名,请使用播放器的display
和attribution
选项。请参阅JSON 配置。
数据将来自故事文档中<amp-story>
的元数据属性,如下所述
- 对于徽标:
entity-logo-src
属性(如果提供),否则为publisher-logo-src
属性。 - 对于文本字符串:
entity
属性(如果提供),否则为publisher
属性。 - 当单击署名时,它会将用户导航到 URL。这将来自
entity-url
属性(如果提供),否则它将使用故事的规范域。
在amp-story 的元数据指南中阅读有关这些属性的更多信息。
修改和添加现有控件
这包括用于创建类似灯箱体验的“关闭”按钮和用于在桌面上的故事之间导航的“跳到下一个”按钮。您还可以添加自己的自定义控件并监听它们的事件以执行自定义操作。请参阅以下示例,了解您可以执行的操作。
要配置它们,请指定一个带有 type=”application/json”
属性的 JSON 配置,作为 <amp-story-player>
元素的子元素。
在配置中,指定一个“controls”数组。“controls”结构如下所述。
配置最终看起来像下面这样
<amp-story-player>
<script type="application/json">
{
"controls": [
{
"name": "close",
"position": "start"
},
{
"name": "skip-to-next"
}
]
}
</script>
<a href="./story1.html"> ... </a>
<a href="./story2.html"> ... </a>
</amp-story-player>
示例 1 - 起始位置的关闭按钮
由于默认值(当包含自定义 UI 配置 JSON 时)会将所有这些按钮设置在右侧,因此我们所要做的就是将关闭按钮移动到开始位置。
<amp-story-player>
<script type="application/json">
{
"controls": [
{
"name": "close",
"position": "start"
}
],
}
</script>
...
示例 2 - 在桌面上显示跳到下一个故事
在桌面上,您现在可以显示一个按钮,该按钮从当前故事导航到下一个故事。一旦用户到达播放器中故事的末尾,它也会自动禁用。
<amp-story-player>
<script type="application/json">
{
"controls": [
{
"name": "skip-to-next"
}
],
}
</script>
...
</amp-story-player>
示例 3 - 更改关闭按钮的图标
<amp-story-player>
<script type="application/json">
{
"controls": [
{
"name": "close",
"backgroundImageUrl": "data:image\/svg+xml;charset=utf-8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.77778 9.33333H4V4H9.33333V5.77778H5.77778V9.33333ZM4 14.6667H5.77778V18.2222H9.33333V20H4V14.6667ZM18.2222 18.2222H14.6667V20H20V14.6667H18.2222V18.2222ZM14.6667 5.77778V4H20V9.33333H18.2222V5.77778H14.6667Z\" fill=\"white\"\/><\/svg>",
"position": "start"
}
]
}
</script>
...
</amp-story-player>
修改行为
有许多选项可用于自定义播放器的行为。请阅读以下各节,了解您可以执行的操作。
循环包装
如果您希望用户在看完最后一个故事后返回第一个故事,您可以启用循环包装选项。
在后台倒回故事
如果您想倒回用户已经在播放器中看过的故事,可以使用 rewind() API
来实现。
程序化导航
您可以通过编程方式在播放器内的故事和页面之间进行导航。如果您想在播放器外部创建自己的导航按钮,或者想根据事件(例如)在页面之间切换,这会很有用。为此,请使用 go() 和 show() API 及其变体。
优化性能和 SEO
播放器会在后台执行许多操作,以确保它在任何给定时刻只使用所需的资源。话虽如此,您可以在自己这边做一些事情,以确保您的网站在使用播放器时运行良好。
对于首屏以上的播放器
如果您希望将故事嵌入到首屏(网页的上半部分;无需向下滚动页面即可看到),我们建议等到用户交互后再加载并播放第一个故事。为此,请按照以下步骤操作
- 使用 JSON 配置禁用自动播放。
- 添加一个将开始播放故事的用户交互。
- 当检测到用户交互时,使用播放器 API 调用 play()。
对于首屏以下的播放器
首屏以下(即需要滚动才能看到的区域)的播放器会自动针对性能进行优化,并且只会预加载第一个故事,直到检测到滚动。一旦播放器在视口中可见,故事就会开始播放。