Как контролировать порядок загрузки нескольких изображений в openseadragon

В моей ситуации у меня есть 10 изображений, загруженных в программу просмотра с одинаковыми границами. каждое изображение расположено одно за другим.

// source is an array of url images.

for(i=0;i < source.length-1;i++){
        this.viewer.addTiledImage({
                tileSource: source[i],
                index: i,
                opacity:0
            });
}

Мое намерение состоит в том, чтобы контролировать непрозрачность каждого изображения с помощью ползунка (ввод диапазона), ползунок устанавливает непрозрачность соответствующего изображения равной 1, и позволяет другим без непрозрачности. Это хорошо работает.

Идея заключается в предварительной загрузке изображений и плавном изменении изображений.

Эта проблема

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

Как я могу это сделать? Я не могу найти способ приостановить загрузку плиток.

Спасибо за вашу помощь.

2 ответа

Решение

Я могу исправить свою проблему, контролируя непрозрачность вместо управления загрузкой по сети, у openseadragon нет метода для управления порядком загрузки на уровне изображения dzi, поэтому способ заключается в управлении непрозрачностью, потому что непрозрачность 0 не делает никакой загрузки. Спасибо авторам openseadragon за помощь в решении этой проблемы.

https://github.com/openseadragon/openseadragon/issues/971

Вы можете попробовать использовать событие 'open' и добавить следующее изображение после загрузки предыдущего. Что-то вроде:

var i =0, viewer = this.viewer;
viewer.addTiledImage({
    tileSource: source[i],
    index: i,
    opacity:0
});
viewer.addHandler('open', function() {
    i++;
    if (source[i]) {
        viewer.addTiledImage({
            tileSource: source[i],
            index: i,
            opacity:0
        });
    } else {
        viewer.removeAllHandlers('open');
    }
});

Обратите внимание, что это непроверенный пример кода, но вы должны понять. И вы должны использовать removeHandler() вместо removeAllHandlers(), но это всего лишь пример.

Другие вопросы по тегам