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

OpenSeaDragon потрясающий.

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

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

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,

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

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

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

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