LoadingManager - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать LoadingManager в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# LoadingManager

Обрабатывает и отслеживает загруженные и ожидающие загрузки данные. Глобальный экземпляр этого класса по умолчанию создается и используется загрузчиками, если не задан вручную - см. DefaultLoadingManager.

В общем, этого должно быть достаточно, однако бывают случаи, когда полезно иметь отдельные загрузчики — например, если вы хотите показать отдельные полосы загрузки для объектов и текстур.

## Пример

В этом примере показано, как использовать LoadingManager для отслеживания хода выполнения процесса GLTFLoader.

`const manager = new v3d.LoadingManager(); manager.onStart = function(url, itemsLoaded, itemsTotal) { console.log('Started loading file: ' + url + '.\nLoaded ' + itemsLoaded + ' of ' + itemsTotal + ' files.'); }; manager.onLoad = function() { console.log('Loading complete!'); }; manager.onProgress = function(url, itemsLoaded, itemsTotal) { console.log('Loading file: ' + url + '.\nLoaded ' + itemsLoaded + ' of ' + itemsTotal + ' files.'); }; manager.onError = function(url) { console.log('There was an error loading ' + url); }; const loader = new v3d.GLTFLoader(manager); loader.load('file.gltf', function(gltf) { // your code goes here });`

Помимо наблюдения за ходом выполнения, менеджер LoadingManager можно использовать для переопределения УРЛ-адресов ресурсов во время загрузки. Это может быть полезно для ассетов, поступающих из событий drag-and-drop, WebSockets, WebRTC или других API. Ниже приведен пример загрузки модели in-memory с использованием УРЛ-адресов Blob.

`// Blob or File oбъекты, созданные при перемещении файлов на страницу const blobs = {'fish.gltf': blob1, 'diffuse.png': blob2, 'normal.png': blob3}; const manager = new v3d.LoadingManager(); // инициализируем менеджер с URL-коллбеком const objectURLs = []; manager.setURLModifier((url) => { url = URL.createObjectURL(blobs[url]); objectURLs.push(url); return url; }); // загружаем как обычно, очищаем УРЛ блобов по окончании const loader = new v3d.GLTFLoader(manager); loader.load('fish.gltf', (gltf) => { app.scene.add(gltf.scene); objectURLs.forEach((url) => URL.revokeObjectURL(url)); });`

## Конструктор

### LoadingManager(onLoad : Function, onProgress : Function, onError : Function)

- onLoad — (необ.) эта функция будет вызвана, когда все загрузчики закончат работу.
- onProgress — (необ.) эта функция будет вызвана, когда элемент будет завершен.
- onError — (необ.) эта функция будет вызвана, если загрузчик столкнется с ошибками.

Создает новый LoadingManager.

## Свойства

### # .onStart : Function

Эта функция будет вызвана, когда начнется загрузка. Аргументы следующие:

- url — УРЛ только что загруженного элемента.
- itemsLoaded — количество уже загруженных элементов на данный момент.
- itemsTotal — общее количество загружаемых элементов.

По умолчанию `undefined`.

### # .onLoad : Function

Эта функция будет вызвана, когда вся загрузка будет завершена. По умолчанию она не определена, если она не передана в конструкторе.

### # .onProgress : Function

Эта функция будет вызвана, когда элемент будет завершен. Аргументы следующие:

- url — УРЛ только что загруженного элемента.
- itemsLoaded — количество уже загруженных элементов на данный момент.
- itemsTotal — общее количество загружаемых элементов.

По умолчанию `undefined`.

### # .onError : Function

Эта функция будет вызвана при ошибке любого элемента, с аргументом:

url — УРЛ элемента, в котором произошла ошибка.

По умолчанию `undefined`.

## Методы

### # .addHandler(regex : Object, loader : Loader) → this

- regex — регулярное выражение.
- loader — загрузчик.

Регистрирует загрузчик с заданным регулярным выражением. Может использоваться для определения того, какой загрузчик должен использоваться для загрузки определенных файлов. Типичный случай использования - перезаписать загрузчик по умолчанию для текстур.

`// add handler for TGA textures manager.addHandler(/\.tga$/i, new TGALoader());`

### # .getHandler(file : String) → Loader

file — путь файла.

Может использоваться для получения зарегистрированного загрузчика для заданного пути к файлу.

### # .removeHandler(regex : Object) → this

regex — регулярное выражение.

Удаляет загрузчик для заданного регулярного выражения.

### # .resolveURL(url : String) → String

url — УРЛ для загрузки.

Учитывая УРЛ, использует обратный вызов модификатора УРЛ (если таковой имеется) и возвращает разрешенный УРЛ. Если модификатор УРЛ не задан, возвращается оригинальный УРЛ.

### # .setURLModifier(callback : Function) → this

callback — обратный вызов модификатора УРЛ. Вызывается с аргументом url, и должен выдавать resolvedURL.

Если указано, то обратный вызов будет передаваться каждому УРЛ ресурса перед отправкой запроса. Обратный вызов может вернуть исходный УРЛ или новый УРЛ, чтобы переопределить поведение загрузки. Это поведение можно использовать для загрузки ассетов из .ZIP-файлов, API перетаскивания и данных URI.

Следующие методы предназначены для внутреннего вызова загрузчиками. Вы не должны вызывать их напрямую.

### # .itemStart(url : String)

url — УРЛ для загрузки.

Должен вызываться загрузчиком, использующим менеджер, когда загрузчик начинает загрузку УРЛ-адреса.

### # .itemEnd(url : String)

url — загруженный УРЛ.

Должен быть вызвано загрузчиком, использующим менеджер, когда загрузчик завершил загрузку УРЛ-адреса.

### # .itemError(url : String)

url — загруженный УРЛ.

Должен вызываться загрузчиком, использующим менеджер, когда загрузчик выдает ошибку при загрузке УРЛ-адреса.

## Исходный файл

О том как получить исходный код этого модуля читайте тут.