我的应用程序的一部分包含类似于谷歌地图的功能,因为用户应该能够放大和缩小容器内的图像。
与谷歌地图一样,我希望用户能够使用鼠标滚轮滚动,并且图像上的像素始终保持在鼠标指针的正下方。因此,基本上用户将缩放到鼠标指针所在的任何位置。
对于缩放/翻译,我正在使用 css 转换,如下所示:
可见的
$('#image').css({
'-moz-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-moz-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-webkit-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-webkit-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-o-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-o-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-ms-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-ms-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px'
});
我已经设法找到了如何执行此操作的各种实现,但是我使用自滚动平滑滚动技术来插入鼠标事件并提供动力。
试图让两者正确地协同工作被证明是很麻烦的。
我没有在此处粘贴一大堆代码,而是创建了一个 jsFiddle,其中包括鼠标滚轮平滑滚动技术以及我目前拥有的缩放功能。
http://jsfiddle.net/gordyr/qGGwx/2/
这本质上是我的应用程序这一部分的功能齐全的演示。
如果滚动鼠标滚轮,您将看到 jqueryui 滑块插入并正确提供动量/减速度。然而,变焦没有正确反应。
如果您只滚动鼠标滚轮一点,则缩放效果很好,但任何进一步的滚动都不起作用。我认为这是因为图像的比例现在已经改变,导致计算不正确。我试图弥补这一点,但到目前为止还没有运气。
总而言之,我想修改我的 jsFiddle 中的代码,以便图像始终直接缩放到鼠标指针。
非常感谢任何愿意提供帮助的人。