资源管理器

文档创建者:admin
浏览次数:36
最后更新:2025-06-21
# 资源管理器组件使用文档

## 概述

资源管理器是一个基于PixiJS的可视化文件资源浏览组件,提供左侧树形文件夹导航和右侧缩略图预览的双面板布局。支持拖拽上传、多种文件类型预览、自定义样式和默认纹理设置等功能。

## 基本使用

### 创建和初始化

```javascript
// 引入依赖
import { 资源管理器 } from './资源管理器.js';

// 创建实例
const explorer = new 资源管理器();

// 初始化(必需)
explorer.初始化(x, y, 宽度, 高度, 配置选项);
```

### 基本示例

```javascript
// 创建PIXI应用
const app = new PIXI.Application({
    width: 1200,
    height: 800,
    backgroundColor: 0x1a1a1a
});
document.body.appendChild(app.view);

// 创建资源管理器
const explorer = new 资源管理器();
explorer.初始化(50, 50, 1100, 700);
app.stage.addChild(explorer.获取容器());

// 设置数据
const data = [
    {
        文本: "我的文件夹",
        文件列表: [
            { name: "图片.jpg", url: "path/to/image.jpg", type: "image" },
            { name: "文档.txt", content: "文件内容", type: "text" }
        ]
    }
];
explorer.设置目录数据(data);
```

## 配置选项

### 初始化配置

```javascript
const 配置 = {
    // 基础尺寸
    宽度: 800,              // 组件总宽度
    高度: 280,              // 组件总高度
    左侧宽度: 250,          // 左侧树形面板宽度
   
    // 背景和边框
    背景颜色: 0x2c2c2c,     // 主背景颜色
    背景透明度: 0.9,        // 背景透明度
    边框颜色: 0x444444,     // 边框颜色
    边框宽度: 1,            // 边框宽度
    边框透明度: 1,          // 边框透明度
    圆角: 0,                // 外框圆角
   
    // 分隔线
    分隔线颜色: 0x666666,   // 左右面板分隔线颜色
    分隔线粗细: 1,          // 分隔线宽度
   
    // 缩略图设置
    缩略宽度: 120,          // 缩略图宽度
    缩略高度: 120,          // 缩略图高度
    预览间距: 16,           // 缩略图间距
   
    // 文字设置
    字体: 'Arial',          // 字体名称
    字号: 14,               // 字体大小
    文字颜色: 0xffffff,     // 文字颜色
   
    // 缩略图外观
    缩略背景颜色: 0x3a3a3a,     // 缩略图背景色
    缩略背景透明度: 1,          // 缩略图背景透明度
    缩略悬停颜色: 0x505050,     // 悬停时背景色
    缩略悬停透明度: 0.6,        // 悬停时透明度
    缩略选中边颜色: 0x2980b9,   // 选中时边框色
    缩略边框宽度: 2,            // 缩略图边框宽度
    缩略圆角: 6,                // 缩略图圆角
   
    // 左侧树形设置
    左侧背景颜色: null,         // 左侧背景色(null则跟随主背景)
    左侧文字颜色: 0xcccccc,     // 左侧文字颜色
   
    // 选中效果
    缩略选中覆盖颜色: 0x000000,     // 选中覆盖色
    缩略选中覆盖透明度: 0.2,        // 选中覆盖透明度
   
    // 右侧设置
    右侧背景颜色: null,             // 右侧背景色(null则跟随主背景)
    缩略描边颜色: 0x2980b9,         // 缩略图描边色
    外框圆角: 0,                    // 外框圆角
    列表悬停颜色: 0x505050,         // 列表悬停色
   
    // 默认纹理配置
    默认纹理: null,                 // 默认纹理对象
    默认纹理URL: null,              // 默认纹理URL
    默认emoji: '✖️',               // 默认emoji
    默认emoji颜色: 0xff0000,        // 默认emoji颜色
    默认emoji大小: 64,              // 默认emoji大小
};

explorer.初始化(0, 0, 800, 600, 配置);
```

## 核心API

### 基础方法

#### 初始化
```javascript
explorer.初始化(x, y, 宽度, 高度, 配置选项)
```
- **参数**:
  - `x` (number): X坐标位置
  - `y` (number): Y坐标位置
  - `宽度` (number): 组件宽度
  - `高度` (number): 组件高度
  - `配置选项` (object): 可选配置对象

#### 设置目录数据
```javascript
explorer.设置目录数据(树数据)
```
- **参数**:
  - `树数据` (array): 树形结构数据
- **数据格式**:
```javascript
[
    {
        文本: "文件夹名称",
        文件列表: [
            {
                name: "文件名.jpg",
                url: "文件URL",
                type: "image",        // 可选,自动检测
                content: "文件内容"   // 文本文件内容
            }
        ]
    }
]
```

#### 获取容器
```javascript
const container = explorer.获取容器()
```
- **返回**:PIXI.Container对象

### 样式设置API

#### 设置缩略样式
```javascript
explorer.设置缩略样式({
    圆角: 8,
    背景颜色: 0x3a3a3a,
    背景透明度: 0.8,
    边框宽度: 2,
    边框颜色: 0x2980b9,
    选中覆盖颜色: 0x000000,
    选中覆盖透明度: 0.3
})
```

#### 设置区域样式
```javascript
explorer.设置区域样式({
    左背景: 0x2a2a2a,           // 左侧背景色
    左边框颜色: 0x444444,       // 左侧边框色
    左边框宽度: 1,              // 左侧边框宽度
    左背景右间距: 5,            // 左侧背景右间距
    左文本偏移: 10,             // 左侧文本水平偏移
    右背景: 0x3a3a3a,           // 右侧背景色
    右边框颜色: 0x555555,       // 右侧边框色
    右边框宽度: 1               // 右侧边框宽度
})
```

#### 设置左树交互样式
```javascript
explorer.设置左树交互样式({
    选中颜色: 0x2980b9,
    悬停颜色: 0x505050,
    选中透明度: 0.8,
    悬停透明度: 0.6
})
```

#### 设置列表样式
```javascript
// 设置选中颜色
explorer.设置列表选中色(0x2980b9);

// 设置悬停颜色
explorer.设置列表悬停色(0x505050);

// 设置悬停透明度
explorer.设置列表悬停透明度(0.6);

// 设置列表框悬停颜色
explorer.设置列表框悬停颜色(0x505050);

// 设置列表框悬浮样式
explorer.设置列表框悬浮样式({
    颜色: 0x505050,
    透明度: 0.6,
    偏移X: 0,
    偏移Y: 0
});
```

### 默认纹理API

#### 设置默认纹理对象
```javascript
// 先加载纹理
PIXI.Assets.load('path/to/texture.png').then(texture => {
    explorer.设置默认纹理(texture);
});
```

#### 设置默认纹理URL
```javascript
explorer.设置默认纹理URL('https://example.com/default-image.png');
```

#### 设置默认emoji
```javascript
explorer.设置默认emoji('❌', 0xff0000, 64);
// 参数:emoji字符, 颜色(十六进制), 字体大小
```

#### 清除默认纹理
```javascript
explorer.清除默认纹理();
```

#### 获取默认纹理配置
```javascript
const config = explorer.获取默认纹理配置();
console.log(config);
// 返回:{默认纹理, 默认纹理URL, 默认emoji, 默认emoji颜色, 默认emoji大小}
```

## 文件类型支持

### 自动检测的文件类型

| 扩展名 | 类型 | 预览方式 |
|--------|------|----------|
| .png, .jpg, .jpeg, .gif, .webp, .bmp | image | 缩略图预览 |
| .mp4, .webm, .ogg, .mov | video | 视频图标 |
| .mp3, .wav, .ogg, .flac | audio | 音频图标 |
| .json | json | 文本预览 |
| .txt, .md, .log, .csv | text | 文本预览 |
| 文件夹 | folder | 文件夹图标 |

### 自定义文件类型

```javascript
const fileData = {
    name: "custom.file",
    url: "path/to/file",
    type: "image",  // 强制指定类型
    content: "文件内容"  // 文本文件内容
};
```

## 事件处理

### 节点选择事件
```javascript
// 监听左侧树形选择
explorer._树形.容器.on('节点选择', (节点数据) => {
    console.log('选中节点:', 节点数据);
    // 节点数据包含:文本, 文件列表等
});
```

### 单元格点击事件
```javascript
// 监听右侧缩略图点击
explorer._列表框.获取容器().on('单元格点击', (单元格数据, 索引) => {
    console.log('点击缩略图:', 单元格数据);
});
```

## 拖拽功能

### 自动支持
- 组件自动支持文件拖拽上传
- 支持多文件同时拖拽
- 自动创建对象URL并显示预览

### 拖拽数据格式
```javascript
// 拖拽的文件会自动转换为以下格式
{
    name: "文件名.jpg",
    type: "image/jpeg",
    objectURL: "blob:http://...",
    文件引用: File对象
}
```

## 高级用法

### 动态更新数据
```javascript
// 更新整个目录结构
const newData = [
    {
        文本: "新文件夹",
        文件列表: [
            { name: "新文件.jpg", url: "new/path.jpg", type: "image" }
        ]
    }
];
explorer.设置目录数据(newData);
```

### 自定义预览窗口
```javascript
// 组件内部已实现预览窗口,支持:
// - 图片大图预览
// - 文本内容预览
// - 视频播放
// - 音频播放
```

### 响应式布局
```javascript
// 监听窗口大小变化
window.addEventListener('resize', () => {
    const newWidth = window.innerWidth - 100;
    const newHeight = window.innerHeight - 100;
    explorer.初始化(50, 50, newWidth, newHeight);
});
```

## 性能优化

### 建议配置
```javascript
// 对于大量文件的优化配置
const 优化配置 = {
    缩略宽度: 80,           // 减小缩略图尺寸
    缩略高度: 80,
    预览间距: 8,            // 减小间距
    默认emoji大小: 32,      // 减小emoji大小
};
```

### 内存管理
```javascript
// 清理资源
function cleanup() {
    // 清理对象URL
    explorer._列表框.获取数据().forEach(item => {
        if (item.内容 && item.内容.objectURL) {
            URL.revokeObjectURL(item.内容.objectURL);
        }
    });
}
```

## 注意事项

### 1. 依赖要求
- 必须引入PixiJS v7+
- 需要树形框组件 (`树形框.js`)
- 需要超级列表框组件 (`超级列表框.js`)
- 需要信息框组件 (`信息框.js`)

### 2. 文件URL处理
- 支持本地文件路径
- 支持网络URL
- 支持Blob URL(拖拽文件)
- 图片加载失败时使用默认纹理

### 3. 样式优先级
- 默认纹理优先级:纹理对象 > 纹理URL > emoji
- 样式设置会立即生效并刷新现有缩略图

### 4. 浏览器兼容性
- 支持现代浏览器的拖拽API
- 支持Canvas 2D渲染
- 需要支持ES6+语法

### 5. 性能考虑
- 大量文件时建议减小缩略图尺寸
- 网络图片建议使用CDN
- 及时清理不需要的对象URL

## 错误处理

### 常见错误及解决方案

1. **图片加载失败**
   - 自动使用默认纹理
   - 检查URL有效性
   - 确认跨域设置

2. **组件初始化失败**
   - 确认PixiJS已正确加载
   - 检查依赖组件是否存在
   - 验证配置参数格式

3. **拖拽功能异常**
   - 检查浏览器拖拽API支持
   - 确认文件权限设置
   - 验证文件类型支持

## 完整示例

```javascript
// 完整的资源管理器使用示例
const app = new PIXI.Application({
    width: 1200,
    height: 800,
    backgroundColor: 0x1a1a1a
});
document.body.appendChild(app.view);

// 创建资源管理器
const explorer = new 资源管理器();

// 初始化配置
const config = {
    宽度: 1100,
    高度: 700,
    左侧宽度: 300,
    背景颜色: 0x2c2c2c,
    缩略宽度: 100,
    缩略高度: 100,
    默认emoji: '⚠️',
    默认emoji颜色: 0xffa500
};

explorer.初始化(50, 50, config.宽度, config.高度, config);

// 设置默认纹理
explorer.设置默认纹理URL('https://example.com/error-image.png');

// 设置样式
explorer.设置区域样式({
    左背景: 0x2a2a2a,
    右背景: 0x3a3a3a,
    左边框宽度: 1,
    右边框宽度: 1
});

// 添加到舞台
app.stage.addChild(explorer.获取容器());

// 设置数据
const data = [
    {
        文本: "图片文件夹",
        文件列表: [
            { name: "风景.jpg", url: "https://picsum.photos/400/300", type: "image" },
            { name: "头像.png", url: "https://picsum.photos/200/200", type: "image" }
        ]
    },
    {
        文本: "文档文件夹",
        文件列表: [
            { name: "说明.txt", content: "这是一个说明文档\n包含多行内容", type: "text" },
            { name: "配置.json", content: '{"name": "test", "value": 123}', type: "json" }
        ]
    }
];

explorer.设置目录数据(data);

// 监听事件
explorer._树形.容器.on('节点选择', (节点数据) => {
    console.log('选中文件夹:', 节点数据.文本);
});
```

这个文档涵盖了资源管理器组件的所有主要功能和使用方法。根据具体需求,您可以组合使用这些API来实现自定义的文件浏览体验。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则