基于其他SO问题(参见底部的信用点),我想出了一种方法,用KineticJS动画“缩放到光标”效果。
这是fiddle。
相关部分如下:
zoom: function(event) {
event.preventDefault();
var evt = event.originalEvent,
mx = evt.clientX - ui.stage.getX(),
my = evt.clientY - ui.stage.getY(),
zoom = (ui.zoomFactor - (evt.wheelDelta < 0 ? 0.4 : -0.4)),
newscale = ui.scale * zoom;
ui.origin.x = mx / ui.scale + ui.origin.x - mx / newscale;
ui.origin.y = my / ui.scale + ui.origin.y - my / newscale;
zoomTween = new Kinetic.Tween({
node: ui.layer,
duration: 0.8,
offsetX: ui.origin.x,
offsetY: ui.origin.y,
scaleX: newscale,
scaleY: newscale
});
zoomTween.play();
ui.scale *= zoom;
}
我应该在代码中更改哪些内容以避免“弹跳”效果,尤其是在快速放大/缩小时?
我的代码是此jsfiddle的分支(附于this answer),有3个小修改:
其他学分: