Можно ли замедлить анимацию панорамирования/масштабирования OpenSeaDragon?

OpenSeaDragon великолепен.

Если я использую JS-метод Viewport#fitBounds для перехода к новому прямоугольнику с аргументами по умолчанию, он «анимирует» переход между текущим видом и новыми запрошенными границами.

Есть ли способ контролировать скорость этой анимации? Я хотел бы замедлить его, чтобы переход от текущего вида к запрошенным границам занимал больше времени для более неторопливого тура.


person jrochkind    schedule 29.07.2014    source источник


Ответы (2)


Вы можете установить animationTime и/или springStiffness при создании средства просмотра OSD. Но это также повлияет на работу пользователя при панорамировании и масштабировании вручную с помощью мыши (или сенсорной панели/экрана и т. д.). Когда я замедлил его настолько, насколько хотел, ручное панорамирование / масштабирование было сбивающим с толку и трудным.

Но я разработал этот хак, чтобы временно изменить animationTime (или, возможно, springStiffness) при выполнении #fitBounds, а затем вернуть его к тому, что было, когда вы закончите.

// temporarily set OpenSeadragon animation params
// to a very slow animate, then restore.
function withSlowOSDAnimation(viewport, f) {

// save old ones
var oldValues = {};
oldValues.centerSpringXAnimationTime = viewport.centerSpringX.animationTime;
oldValues.centerSpringYAnimationTime = viewport.centerSpringY.animationTime;
oldValues.zoomSpringAnimationTime = viewport.zoomSpring.animationTime;

// set our new ones
viewport.centerSpringX.animationTime =
  viewport.centerSpringY.animationTime =
  viewport.zoomSpring.animationTime =
  6;

// callback
f()

// restore values
viewport.centerSpringX.animationTime = oldValues.centerSpringXAnimationTime;
viewport.centerSpringY.animationTime = oldValues.centerSpringYAnimationTime;
viewport.zoomSpring.animationTime = oldValues.zoomSpringAnimationTime;
}

Используйте как:

withSlowOSDAnimation(viewer.viewport, function() {
  // stuff
  viewer.viewport.fitBounds(somebounds);
});

Это работает, хотя я не уверен, что использую внутренний API, который может быть изменен. Возможно, это была бы хорошая дополнительная функция для OpenSeadragon, возможность предоставлять animationTime, springStiffness и/или просто некоторые объекты OpenSeadragon.Spring с вызовом fitBounds для применения к этому fitBounds.

person jrochkind    schedule 03.08.2014
comment
Это кажется отличным решением, учитывая доступный API. Они, по крайней мере, полувнутренние, поэтому в будущем они могут сломаться, но они должны быть относительно устойчивыми. Было бы здорово добавить улучшенную поддержку настройки анимации... не стесняйтесь сообщать о проблеме на GitHub OpenSeadragon! - person iangilman; 05.08.2014

Рад, что тебе понравилось!

Чтобы повлиять на скорость анимации, поэкспериментируйте с параметрами springStiffness и animationTime при создании средства просмотра. Видеть:

http://openseadragon.github.io/docs/OpenSeadragon.html#Options

person iangilman    schedule 31.07.2014
comment
Спасибо! Установка springStiffness и animationTime при создании средства просмотра привела к плохому взаимодействию с пользователем при ручном панорамировании и масштабировании с помощью перетаскивания мышью и т. Д. Но я придумал хакерский способ, которым я добавлю другой ответ, чтобы я мог вставить исходный код. Может быть идея для более поддерживаемой функции. - person jrochkind; 03.08.2014