--- title: "Vimeo 播放器" description: "在你的 Nuxt 应用中展示性能优化的 Vimeo 视频。" canonical_url: "https://nuxt-scripts.zhcndoc.com/scripts/vimeo-player" last_updated: "2026-05-22T14:11:53.683Z" --- [Vimeo](https://vimeo.com/) 是一个视频托管平台,允许你上传和分享视频。 Nuxt Scripts 提供了一个 `useScriptVimeoPlayer` 组合式函数和一个无 UI 的 `ScriptVimeoPlayer` 组件,用于与 Vimeo 播放器交互。 ## 类型 要使用具有完整 TypeScript 支持的视频播放器,你需要 安装 `@vimeo/player` 依赖,其中包含了其自身的类型定义。 ```bash pnpm add -D @vimeo/player ``` ## [``](/scripts/vimeo-player) `ScriptVimeoPlayer` 组件是 `useScriptVimeoPlayer` 组合式函数的封装。它提供了一种简便方式在你的 Nuxt 应用中嵌入 Vimeo 视频。 通过利用 [元素事件触发](/docs/guides/script-triggers#element-event-triggers),仅在特定元素事件发生时加载 Vimeo 播放器,从而优化性能。 默认情况下,它会在 `mousedown` 事件时加载。 ### 演示 ```vue [输入] ``` ### 属性(Props) `ScriptVimeoPlayer` 组件接收以下属性: - `trigger`:触发加载 Vimeo 播放器的事件,默认是 `mousedown`。更多信息请参见 [元素事件触发](/docs/guides/script-triggers#element-event-triggers)。 - `aboveTheFold`:优化折叠上方内容的占位图像,默认是 `false`。 - `rootAttrs`:覆盖自动设置的根节点属性。 - `placeholderAttrs`:占位图像的属性,默认是 `{ loading: 'lazy' }`。 - `id`:`vimeoOptions.id` 的简写。 - `url`:`vimeoOptions.url` 的简写。 - `vimeoOptions`:支持 Player SDK 的所有选项,完整文档请参考 [嵌入选项](https://developer.vimeo.com/player/sdk/embed)。 ```ts interface VimeoPlayerProps { id: number | undefined url?: string | undefined autopause?: boolean | undefined autoplay?: boolean | undefined background?: boolean | undefined byline?: boolean | undefined color?: string | undefined controls?: boolean | undefined dnt?: boolean | undefined height?: number | undefined interactive_params?: string | undefined keyboard?: boolean | undefined loop?: boolean | undefined maxheight?: number | undefined maxwidth?: number | undefined muted?: boolean | undefined pip?: boolean | undefined playsinline?: boolean | undefined portrait?: boolean | undefined responsive?: boolean | undefined speed?: boolean | undefined quality?: VimeoVideoQuality | undefined texttrack?: string | undefined title?: boolean | undefined transparent?: boolean | undefined width?: number | undefined } ``` #### 预加载(Eager Loading)占位图 Vimeo 视频的占位图默认是懒加载的。如果你的视频是折叠上方内容,建议修改此行为,或者使用 `#placeholder` 插槽自定义占位图。 ```vue [占位图属性] ``` ```vue [占位图插槽] ``` ### 组件 API 完整的属性、事件和插槽信息请参阅 [Facade 组件 API](/docs/guides/facade-components#facade-components-api)。 ### 事件 `ScriptVimeoPlayer` 组件会触发 Vimeo 播放器 SDK 的所有事件。完整文档请查看 [播放器事件](https://developer.vimeo.com/player/sdk/reference#about-player-events)。 ```ts const emits = defineEmits<{ play: [e: EventMap['play'], player: Player] playing: [e: EventMap['playing'], player: Player] pause: [e: EventMap['pause'], player: Player] ended: [e: EventMap['ended'], player: Player] timeupdate: [e: EventMap['timeupdate'], player: Player] progress: [e: EventMap['progress'], player: Player] seeking: [e: EventMap['seeking'], player: Player] seeked: [e: EventMap['seeked'], player: Player] texttrackchange: [e: EventMap['texttrackchange'], player: Player] chapterchange: [e: EventMap['chapterchange'], player: Player] cuechange: [e: EventMap['cuechange'], player: Player] cuepoint: [e: EventMap['cuepoint'], player: Player] volumechange: [e: EventMap['volumechange'], player: Player] playbackratechange: [e: EventMap['playbackratechange'], player: Player] bufferstart: [e: EventMap['bufferstart'], player: Player] bufferend: [e: EventMap['bufferend'], player: Player] error: [e: EventMap['error'], player: Player] loaded: [e: EventMap['loaded'], player: Player] durationchange: [e: EventMap['durationchange'], player: Player] fullscreenchange: [e: EventMap['fullscreenchange'], player: Player] qualitychange: [e: EventMap['qualitychange'], player: Player] camerachange: [e: EventMap['camerachange'], player: Player] resize: [e: EventMap['resize'], player: Player] enterpictureinpicture: [e: EventMap['enterpictureinpicture'], player: Player] leavepictureinpicture: [e: EventMap['leavepictureinpicture'], player: Player] }>() ``` ### 插槽(Slots) 由于该组件为无 UI 组件,你可以通过多个插槽自定义播放器的加载前展示。 **default** 默认插槽用来显示始终可见的内容。 ```vue ``` **awaitingLoad** 该插槽用于视频加载时显示内容。 ```vue ``` **loading** 该插槽用于视频加载过程中显示的内容。 ```vue ``` **placeholder** 该插槽用于视频加载前显示的占位图。默认情况下,它会展示 Vimeo 视频的缩略图。你可以根据需求自定义显示。 ```vue ``` ## [`useScriptVimeoPlayer()`](/scripts/vimeo-player) `useScriptVimeoPlayer` 组合式函数让你可以更细粒度地控制 Vimeo 播放器 SDK。它提供了加载 Vimeo 播放器 SDK 并以编程方式交互的方式。 ```ts export function useScriptVimeoPlayer(_options?: VimeoPlayerInput) {} ``` 请参考 [脚本注册表](/docs/guides/registry-scripts) 指南以获取更多高级用法。 ## 示例 ```ts export interface VimeoPlayerApi { Vimeo: { Player: ScriptVimeoPlayer } } ``` 加载 Vimeo 播放器 SDK 并以编程方式进行交互。 ```vue ```