---
title: "YouTube 播放器"
description: "在您的 Nuxt 应用中展示性能优化的 YouTube 视频。"
canonical_url: "https://nuxt-scripts.zhcndoc.com/scripts/youtube-player"
last_updated: "2026-05-22T14:11:53.591Z"
---
[YouTube](https://youtube.com/) 是一个视频托管平台,允许您上传和分享视频。
Nuxt Scripts 提供了 `useScriptYouTubePlayer` 组合函数和无头(headless)的 `ScriptYouTubePlayer` 组件,用于与 YouTube 播放器进行交互。
## 类型
要使用带有完整 TypeScript 支持的 YouTube,您需要安装 `@types/youtube` 依赖。
```bash
pnpm add -D @types/youtube
```
## [``](/scripts/youtube-player)
`ScriptYouTubePlayer` 组件是基于 `useScriptYouTubePlayer` 组合函数的封装。它提供了一种简单的方法来在您的 Nuxt 应用中嵌入 YouTube 视频。
它通过利用 [元素事件触发器](/docs/guides/script-triggers#element-event 触发器) 进行性能优化,仅在特定元素发生事件时加载 YouTube 播放器。默认情况下,它会在 `mousedown` 事件时加载。
### 演示
```vue [输入]
```
### 属性
`ScriptYouTubePlayer` 组件接受以下 props:
- `trigger`:加载 YouTube 播放器的触发事件。默认是 `mousedown`。欲了解更多信息,请参阅 [元素事件触发器](/docs/guides/script-triggers#element-event-%E8%A7%A6%E5%8F%91%E5%99%A8)。
- `placeholderAttrs`:占位图片的属性。默认是 `{ loading: 'lazy' }`。
- `aboveTheFold`:优化首屏内容的占位图片。默认是 `false`。
- `placeholderObjectFit`:占位图片的 `object-fit` CSS 属性。默认是 `cover`。对非 16:9 视频(如 YouTube Shorts)很有用。
`playerVars` prop 支持所有来自 [YouTube IFrame Player API](https://developers.google.com/youtube/iframe_api_reference) 的脚本选项,请参考 [支持的参数](https://developers.google.com/youtube/player_parameters#Parameters) 以获取完整文档。
```ts
export interface YouTubeProps {
// YouTube 播放器
videoId: string
playerVars?: YT.PlayerVars
width?: number
height?: number
placeholderObjectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down'
}
```
### 隐私
`` 组件默认隐私友好,视频托管地址设置为 `https://www.youtube-nocookie.com`。
若要修改此行为,可以将 `host` prop 设置为 `https://www.youtube.com`。
```vue
```
### 占位符
YouTube 播放器的占位图片是 1280x720 大小的 webp,默认启用懒加载。
若想修改占位符大小,可以设置 `thumbnailSize` prop;如果您更喜欢使用 jpg 格式,可以将 `webp` prop 设为 `false`。
```vue
```
如果您需要对占位符进行精细控制,可以设置 `placeholderAttrs` prop,或使用 `#placeholder` 插槽完全覆盖。
#### 提前加载
如果您的视频处于首屏位置,请调整此行为,或考虑使用 `#placeholder` 插槽自定义占位图片。
```vue [占位符属性]
```
```vue [占位符插槽]
```
### 组件 API
请查看 [Facade 组件 API](/docs/guides/facade-components#facade-components-api) 获取完整的 props、事件和插槽说明。
### 事件
`ScriptYouTubePlayer` 组件会发出所有来自 YouTube 播放器 SDK 的事件。完整文档请见 [播放器事件](https://developers.google.com/youtube/iframe_api_reference#Events)。
```ts
const emits = defineEmits<{
'ready': [e: YT.PlayerEvent]
'state-change': [e: YT.OnStateChangeEvent, target: YT.Player]
'playback-quality-change': [e: YT.OnPlaybackQualityChangeEvent, target: YT.Player]
'playback-rate-change': [e: YT.OnPlaybackRateChangeEvent, target: YT.Player]
'error': [e: YT.OnErrorEvent, target: YT.Player]
'api-change': [e: YT.PlayerEvent, target: YT.Player]
}>()
```
### 插槽
由于该组件是无头设计,提供了一些插槽让您能在加载视频之前自定义播放器的内容。
**default**
默认插槽用于显示始终可见的内容。
```vue
Nuxt 视频
```
**awaitingLoad**
该插槽用于显示视频加载期间的内容。
```vue
点击播放!
```
**loading**
该插槽用于显示视频加载时的内容。
```vue
加载中...
```
**placeholder**
该插槽用于在视频加载前显示占位图片。默认显示视频的 YouTube 缩略图。您可以自定义显示内容。
```vue
```
## [`useScriptYouTubePlayer()`](/scripts/youtube-player)
`useScriptYouTubePlayer` 组合函数让您可以更细粒度地控制 YouTube 播放器 SDK。它提供了一种加载 YouTube 播放器 SDK 并以编程方式交互的方式。
```ts
export function useScriptYouTubePlayer(_options: YouTubePlayerInput) {}
```
请参阅 [注册脚本](/docs/guides/registry-scripts) 指南,了解更多高级用法。
## 示例
加载 YouTube 播放器 SDK 并以编程方式与之交互。
```vue
```