---
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
视频提供者:NuxtJS
```
**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
```