3.0 KiB
3.0 KiB
Tasks
1. Детект и 360-вьюер
- 1.1 Добавить
lib/pano.tsсisPanoTag(photo)(тегpano360, без учёта регистра и пробелов). Проверка:npm run checkпроходит; функция истинна для тегаpano360/PANO360и ложна без него. - 1.2 Реализовать
lib/components/PanoViewer.svelte: WebGL equirect (полноэкранный quad, луч из uv+fov+yaw/pitch, выборка equirect), текстура изoriginal_urlс даунскейлом доmin(4096, MAX_TEXTURE_SIZE)и фолбэкомpreview_url,ResizeObserver+DPR,reset(),onFallback(). Проверка: на фото с тегом рисуется сцена; драг/колесо/сброс меняют вид; при отсутствии WebGL вызывается фолбэк. - 1.3 Освобождать ресурсы (текстура/программа/буфер, контекст) при размонтировании и смене
src. Проверка: многократное переключение фото не копит контексты (поgl.getError()/поведению без падений).
2. Интеграция в Viewer
- 2.1 В
Viewer.svelteвычислятьpano = isPanoTag(current) || isPanoTag(fresh)и рендеритьPanoViewer(сkey={current.id}) вместо плоского<img>; при фолбэке —<img>. Проверка: tagged фото → канвас, нетэгнутое →<img>. - 2.2 Развести интеракции: в 360 отключить плоский зум/панорамирование и скролл-жесты;
Space→panoRef.reset(); drag/свайп — осмотр; колесо — FOV. Сохранить стрелки, ленту,f/fullscreen, контекстное меню. Проверка: смена фото стрелками/лентой в 360 работает; плоский режим не изменился. - 2.3 Добавить индикатор «360» в топбаре при активном режиме. Проверка: на панораме индикатор виден, на обычном фото — нет.
3. Сетка
- 3.1 Добавить бейдж «360» на плитку
PhotoGridдля фото с тегомpano360. Проверка: на плитке панорамного фото виден бейдж, на остальных — нет.
4. Проверка
- 4.1
cd frontend && npm run checkбез ошибок и предупреждений;npm run buildпроходит. - 4.2 Расширить CDP‑QA панo-сценариями: тег
pano360через API → канвас и индикатор «360»; без тега →<img>; drag меняет вид (data-yaw); смена фото сохраняет/снимает режим по тегу. Проверка: все проверки PASS.