# React Vegas Demo
**Repository Path**: Dracowyn/react-vegas-demo
## Basic Information
- **Project Name**: React Vegas Demo
- **Description**: [Vegas Background SlideShow] 的 React 实现 Demo,提供强大而灵活的幻灯片组件,支持具有平滑过渡和可自定义效果的图像和视频。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-02-13
- **Last Updated**: 2025-03-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: React, TypeScript
## README
# React Vegas 幻灯片组件
基于 [Vegas Background SlideShow](https://github.com/jaysalvat/vegas) 实现的React组件,提供强大灵活的幻灯片展示功能,支持图片和视频,具有平滑过渡效果和可定制化功能。
简体中文 | [English](./README.EN.md)
## 功能特性
- 🖼️ 支持图片和视频
- 🎬 多种过渡效果
- 🔄 可配置间隔时间的自动播放
- 🎯 自定义对齐方式
- 🔀 随机播放模式
- ⚡ 预加载功能
- 📱 响应式设计
- 🎨 可定制的遮罩层和进度条
- 🎮 手动控制功能
- 🎯 TypeScript 支持
## 安装说明
当前暂未发布npm包,使用方法:
1. 将Vegas.tsx文件复制到项目中
2. 安装必要依赖:
```bash
npm install motion
# 或
yarn add motion
```
## 基础用法
```tsx
import Vegas from '@your-org/vegas-slideshow';
const App = () => {
const slides = [
{
src: '/images/slide1.jpg',
transition: 'fade'
},
{
src: '/images/slide2.jpg',
transition: 'slideLeft'
}
];
return (
);
};
```
## 高级用法
```tsx
const slides = [
{
src: '/images/slide1.jpg',
align: 'center', // 水平对齐
valign: 'center', // 垂直对齐
transition: 'fade', // 过渡效果
transitionDuration: 2000, // 过渡时长
delay: 5000 // 本页停留时间
},
{
src: '/videos/video1.mp4',
video: {
src: [ // 多格式支持
'/videos/video1.mp4',
'/videos/video1.webm'
],
muted: true, // 静音播放
loop: false // 是否循环
},
transition: 'zoomIn' // 缩放进入效果
}
];
```
## 组件属性
### 基础属性
| 属性 | 类型 | 默认值 | 说明 |
|----------|---------|-------|-------------|
| slides | Array | 必填 | 幻灯片对象数组 |
| delay | number | 5000 | 幻灯片切换间隔(毫秒) |
| autoplay | boolean | true | 启用自动播放 |
| loop | boolean | true | 循环播放 |
| shuffle | boolean | false | 随机播放顺序 |
### 过渡效果
| 属性 | 类型 | 默认值 | 说明 |
|-------------------------|--------|--------|------------|
| transition | string | 'fade' | 过渡效果类型 |
| transitionDuration | number | 1000 | 过渡时长(毫秒) |
| firstTransitionDuration | number | 3000 | 初始过渡时长(毫秒) |
### 视觉属性
| 属性 | 类型 | 默认值 | 说明 |
|---------|---------|-------|--------|
| overlay | boolean | false | 显示遮罩层 |
| timer | boolean | true | 显示进度条 |
| color | string | null | 背景颜色 |
| cover | boolean | true | 图片覆盖模式 |
### 加载配置
| 属性 | 类型 | 默认值 | 说明 |
|------------------------|---------|-----------|----------|
| preload | boolean | false | 启用资源预加载 |
| preloadImage | boolean | false | 预加载图片 |
| preloadVideo | boolean | false | 预加载视频 |
| defaultBackground | string | undefined | 加载背景图 |
| defaultBackgroundDelay | number | 2000 | 加载背景显示时长 |
### 回调函数
| 属性 | 类型 | 说明 |
|---------|------------|----------|
| onInit | () => void | 初始化完成时触发 |
| onPlay | () => void | 播放开始时触发 |
| onPause | () => void | 暂停时触发 |
| onWalk | () => void | 幻灯片切换时触发 |
## 幻灯片对象属性
```typescript
interface Slide {
src: string; // 资源路径
color?: string; // 背景色
delay?: number; // 单独设置停留时间
align?: 'left' | 'center' | 'right'; // 水平对齐
valign?: 'top' | 'center' | 'bottom'; // 垂直对齐
transition?: string; // 单独过渡效果
transitionDuration?: number; // 单独过渡时长
cover?: boolean; // 是否覆盖模式
video?: { // 视频配置
src: string[]; // 多格式源
muted?: boolean; // 静音
loop?: boolean; // 循环
};
}
```
## 可用过渡效果
- `fade`: 淡入淡出
- `slideLeft`: 左滑进入
- `slideRight`: 右滑进入
- `zoomIn`: 放大进入
- `zoomOut`: 缩小退出
- `zoomInOut`: 组合缩放
## 组件方法
通过ref可调用以下方法:
```tsx
const vegasRef = useRef();
// 可用方法
vegasRef.current.play(); // 开始播放
vegasRef.current.pause(); // 暂停播放
vegasRef.current.next(); // 下一张
vegasRef.current.previous(); // 上一张
```
## 浏览器支持
- Chrome (最新版)
- Firefox (最新版)
- Safari (最新版)
- Edge (最新版)
## 性能优化建议
1. 使用前优化图片体积
2. 选择合适的视频格式和分辨率
3. 启用预加载提升性能
4. 推荐使用WebP格式图片
5. 适当压缩视频文件
## 已知问题
- 部分浏览器需用户交互后才允许视频自动播放
- Safari对某些视频格式支持有限
## 致谢
本组件灵感来源于Jay Salvat开发的[jQuery版Vegas背景轮播插件](https://github.com/jaysalvat/vegas),使用React和TypeScript进行了现代化重构。