- Добавлены CSS стили для drag & drop (курсоры, анимации, placeholder) - Реализованы JavaScript функции для перетаскивания окон - Добавлена иконка перетаскивания в заголовки multi-view панелей - Автоматическое сохранение порядка окон в localStorage - Обновлена документация и справка - Добавлена подробная документация по drag & drop функциональности
183 lines
7.6 KiB
Markdown
183 lines
7.6 KiB
Markdown
# Drag & Drop для Multi-View режима
|
||
|
||
## Обзор
|
||
|
||
LogBoard+ поддерживает drag & drop функциональность в режиме мультипросмотра (multi-view), позволяя пользователям изменять порядок окон логов путем перетаскивания их заголовков.
|
||
|
||
## Возможности
|
||
|
||
### Основные функции
|
||
- **Перетаскивание окон**: Изменение порядка окон логов в multi-view режиме
|
||
- **Визуальная обратная связь**: Анимации и стили во время перетаскивания
|
||
- **Сохранение порядка**: Автоматическое сохранение нового порядка в localStorage
|
||
- **Placeholder**: Визуальный индикатор места вставки во время перетаскивания
|
||
|
||
### Индикаторы перетаскивания
|
||
- **Иконка ⋮⋮**: Отображается в заголовке каждого окна
|
||
- **Курсор**: Изменяется на `grab`/`grabbing` при наведении и перетаскивании
|
||
- **Подсказки**: Всплывающие подсказки с инструкциями
|
||
|
||
## Использование
|
||
|
||
### Как перетащить окно
|
||
1. **Включите multi-view режим**: Выберите несколько контейнеров (Shift+клик или Ctrl+клик)
|
||
2. **Найдите иконку перетаскивания**: В заголовке каждого окна есть иконка ⋮⋮
|
||
3. **Начните перетаскивание**: Нажмите и удерживайте левую кнопку мыши на заголовке окна
|
||
4. **Переместите окно**: Перетащите окно в нужную позицию
|
||
5. **Отпустите кнопку мыши**: Окно встанет на новое место
|
||
|
||
### Визуальные эффекты
|
||
- **Во время перетаскивания**:
|
||
- Окно становится полупрозрачным
|
||
- Появляется тень
|
||
- Окно слегка увеличивается
|
||
- Создается placeholder на месте исходного окна
|
||
|
||
- **При наведении на другие окна**:
|
||
- Окна подсвечиваются синим цветом
|
||
- Показывается, куда будет вставлено окно
|
||
|
||
## Техническая реализация
|
||
|
||
### CSS классы
|
||
```css
|
||
.multi-view-panel.dragging {
|
||
opacity: 0.8;
|
||
transform: scale(1.02);
|
||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||
z-index: 1000;
|
||
cursor: grabbing;
|
||
}
|
||
|
||
.multi-view-panel.drag-over {
|
||
border-color: var(--accent);
|
||
background: var(--tab-active);
|
||
transform: scale(1.01);
|
||
}
|
||
|
||
.multi-view-panel.drag-placeholder {
|
||
background: var(--chip);
|
||
border: 2px dashed var(--accent);
|
||
opacity: 0.5;
|
||
pointer-events: none;
|
||
}
|
||
```
|
||
|
||
### JavaScript функции
|
||
- `initDragAndDrop()`: Инициализация drag & drop
|
||
- `handleDragStart()`: Обработчик начала перетаскивания
|
||
- `handleDragEnd()`: Обработчик окончания перетаскивания
|
||
- `handleDrop()`: Обработчик сброса элемента
|
||
- `reorderMultiViewPanels()`: Перестановка панелей
|
||
- `updateDragAndDrop()`: Обновление drag & drop для новых панелей
|
||
|
||
### Состояние перетаскивания
|
||
```javascript
|
||
let dragState = {
|
||
isDragging: false,
|
||
draggedElement: null,
|
||
draggedIndex: -1,
|
||
originalIndex: -1,
|
||
placeholder: null
|
||
};
|
||
```
|
||
|
||
## Ограничения
|
||
|
||
### Поддерживаемые браузеры
|
||
- Chrome 66+
|
||
- Firefox 60+
|
||
- Safari 12+
|
||
- Edge 79+
|
||
|
||
### Условия работы
|
||
- Только в multi-view режиме (2+ контейнера)
|
||
- Только перетаскивание заголовков окон
|
||
- Не работает в single-view режиме
|
||
|
||
## Настройки
|
||
|
||
### Сохранение порядка
|
||
Порядок окон автоматически сохраняется в localStorage и восстанавливается при перезагрузке страницы.
|
||
|
||
### Отключение функциональности
|
||
Для отключения drag & drop можно удалить обработчики событий:
|
||
```javascript
|
||
document.removeEventListener('dragstart', handleDragStart);
|
||
document.removeEventListener('dragend', handleDragEnd);
|
||
// ... и другие обработчики
|
||
```
|
||
|
||
## Устранение неполадок
|
||
|
||
### Проблемы с перетаскиванием
|
||
1. **Окно не перетаскивается**:
|
||
- Убедитесь, что вы в multi-view режиме
|
||
- Проверьте, что перетаскиваете за заголовок окна
|
||
- Убедитесь, что браузер поддерживает HTML5 Drag & Drop
|
||
|
||
2. **Порядок не сохраняется**:
|
||
- Проверьте, что localStorage доступен
|
||
- Убедитесь, что нет ошибок в консоли браузера
|
||
|
||
3. **Визуальные эффекты не работают**:
|
||
- Проверьте, что CSS стили загружены
|
||
- Убедитесь, что нет конфликтов с другими стилями
|
||
|
||
### Отладка
|
||
Включите отладочные сообщения в консоли браузера:
|
||
```javascript
|
||
console.log('Drag & Drop Debug:', dragState);
|
||
```
|
||
|
||
## Примеры использования
|
||
|
||
### Базовое перетаскивание
|
||
```javascript
|
||
// Автоматически инициализируется при загрузке страницы
|
||
initDragAndDrop();
|
||
```
|
||
|
||
### Программное изменение порядка
|
||
```javascript
|
||
// Перестановка панелей программно
|
||
reorderMultiViewPanels(0, 2); // Переместить первую панель на третье место
|
||
```
|
||
|
||
### Получение текущего порядка
|
||
```javascript
|
||
// Получить текущий порядок контейнеров
|
||
const currentOrder = state.selectedContainers;
|
||
console.log('Текущий порядок:', currentOrder);
|
||
```
|
||
|
||
## Совместимость
|
||
|
||
### С существующим функционалом
|
||
- Совместимо с AJAX обновлением логов
|
||
- Работает с фильтрацией по уровням логирования
|
||
- Поддерживает автопрокрутку и перенос строк
|
||
- Интегрируется с системой сохранения настроек
|
||
|
||
### Производительность
|
||
- Минимальное влияние на производительность
|
||
- Оптимизированные обработчики событий
|
||
- Эффективное обновление DOM
|
||
|
||
## Планы развития
|
||
|
||
### Будущие улучшения
|
||
- Поддержка перетаскивания между разными сетками
|
||
- Анимации при изменении размера окон
|
||
- Группировка окон по категориям
|
||
- Экспорт/импорт конфигурации порядка окон
|
||
|
||
### Обратная связь
|
||
Для предложений по улучшению drag & drop функциональности обращайтесь к автору проекта.
|
||
|
||
---
|
||
|
||
**Автор**: Сергей Антропов
|
||
**Сайт**: https://devops.org.ru
|
||
**Версия**: 2.0
|