这是如何在使用我自己的鼠标滚轮平滑滚动时缩放到鼠标指针的后续问题?
我正在使用 css 转换将图像缩放到鼠标指针。我还使用我自己的平滑滚动算法来插入并为鼠标滚轮提供动量。
在我之前的问题中,在 Bali Balo 的帮助下,我已经成功完成了 90% 的工作。
您现在可以将图像一直缩放到鼠标指针,同时仍然可以平滑滚动,如下面的 JSFiddle 所示:
但是,移动鼠标指针时功能会中断。
为了进一步澄清,如果我在鼠标滚轮上放大一个槽口,图像会围绕正确的位置进行缩放。对于我在鼠标滚轮上放大的每个缺口,这种行为都会继续,完全符合预期。但是,如果在部分放大后,我将鼠标移动到不同的位置,则功能会中断,我必须完全缩小才能更改缩放位置。
预期行为是为了在缩放过程中正确反映缩放过程中鼠标位置的任何变化。
控制当前行为的两个主要函数如下:
self.container.on('mousewheel', function (e, delta) {
var offset = self.image.offset();
self.mouseLocation.x = (e.pageX - offset.left) / self.currentscale;
self.mouseLocation.y = (e.pageY - offset.top) / self.currentscale;
if (!self.running) {
self.running = true;
self.animateLoop();
}
self.delta = delta
self.smoothWheel(delta);
return false;
});
该函数在缩放图像的当前比例下收集鼠标的当前位置。
然后它启动我的平滑滚动算法,导致每次插值都调用下一个函数:
zoom: function (scale) {
var self = this;
self.currentLocation.x += ((self.mouseLocation.x - self.currentLocation.x) / self.currentscale);
self.currentLocation.y += ((self.mouseLocation.y - self.currentLocation.y) / self.currentscale);
var compat = ['-moz-', '-webkit-', '-o-', '-ms-', ''];
var newCss = {};
for (var i = compat.length - 1; i; i--) {
newCss[compat[i] + 'transform'] = 'scale(' + scale + ')';
newCss[compat[i] + 'transform-origin'] = self.currentLocation.x + 'px ' + self.currentLocation.y + 'px';
}
self.image.css(newCss);
self.currentscale = scale;
},
此函数采用缩放量 (1-10) 并应用 css 变换,使用 transform-origin 重新定位图像。
尽管这对于在图像完全缩小时选择的静止鼠标位置非常有效;如上所述,当鼠标光标在部分缩放后移动时,它会中断。
非常感谢任何可以提供帮助的人。