Могу ли я замедлить анимацию панорамирования / масштабирования 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 при создании программы просмотра. Увидеть: