我可以放慢OpenSeaDragon平移/缩放动画的速度吗?

时间:2014-07-29 16:43:25

标签: javascript animation seadragon openseadragon

OpenSeaDragon太棒了。

如果我使用Viewport#fitBounds JS方法移动到一个带有默认参数的新矩形,它会动画'当前视图与新请求的边界之间的转换。

有没有办法控制这个动画的速度?我想放慢速度,因此从当前视图移动到请求的边界需要更长的时间,以便进行更悠闲的旅行。

2 个答案:

答案 0 :(得分:2)

您可以在创建OSD查看器时设置animationTime和/或springStiffness。但是,当用鼠标(或触摸板/屏幕等)手动平移和缩放时,这将影响用户体验。当我按照我想要的速度放慢速度时,手动平移/缩放体验令人不安和困难。

但是我做了这个hack来暂时改变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和/或只有一些带有fitBounds调用的OpenSeadragon.Spring对象,以应用于fitBounds

答案 1 :(得分:1)

很高兴你喜欢!

要影响动画速度,请在创建查看器时使用弹簧刚度和动画时间选项。参见:

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