2011-11-06 27 views
7

我创建了一个很酷的图像查看器,但卡在一个特定的部分:放大时平移图像。这似乎是一个微不足道的问题,我已经尝试了几乎所有关于SO的类似问题的答案,但每次,某些工作不正确。我需要一双新鲜的眼睛。如何使用jQuery正确地放大比其容器大的图像?

我已经在我的开发服务器上临时打开了一个URL。看看这个页面:

[URL关闭]

接下来,向上移动鼠标滚轮来触发变焦。我们到了。放大后,点击并拖动以尝试平移图像。它正在平移,但有些不对。这是目前用于平移代码:

var clicking = false; 
var previousX; 
var previousY; 

$("#bigimage").mousedown(function(e) { 

    e.preventDefault(); 
    previousX = e.clientX; 
    previousY = e.clientY; 
    clicking = true; 
}); 

$(document).mouseup(function() { 
    clicking = false; 
}); 

$("#bigimage").mousemove(function(e) { 

    if (clicking) { 
     e.preventDefault(); 
     var directionX = (previousX - e.clientX) > 0 ? 1 : -1; 
     var directionY = (previousY - e.clientY) > 0 ? 1 : -1; 
     $("#bigimage").scrollLeft($("#bigimage").scrollLeft() + 10 * directionX); 
     $("#bigimage").scrollTop($("#bigimage").scrollTop() + 10 * directionY); 
     previousX = e.clientX; 
     previousY = e.clientY; 
    } 
}); 

我正在寻找解决方案具有以下特性:

  • 平移在X和Y轴的方向正确
  • 它不应该是可以在图像的边缘外部平移
  • 合理流畅的平移
  • 不错:窗口大小调整不应引起任何问题

尽管我很欣赏我可以获得的任何帮助,但请不要将我指向一个通用插件,我已经尝试过太多,因此我正在寻找适用于特定场景的答案。我非常绝望,我甚至会为满足上述特征的完美解决方案设置金钱赏金。

PS:请尝试在Firefox或链接一个WebKit浏览器

+0

你能描述什么不工作,并提供小提琴吗?据我所知,在没有缩放的情况下,图像已经出现了一些平移问题。我以前创建了一个背景平移脚本,只需移动鼠标,看到[这个答案](http://stackoverflow.com/questions/7776843/mouse-on-left-of-screen-move-image-to-left - 鼠标右键同屏/ 7777153#7777153)获得灵感。 –

+0

@RobW谢谢,但有了背景图像的方法将是整个事情的一个重大改革,太多的依赖关系,我想整个放弃这个功能。我希望它可以使用滚动方法修复。 – Ferdy

+0

正如你可以在我的小提琴中看到的那样,平移并不困难,并且可以高效地完成。您的问题可能是由于编写代码而不考虑如何有效地实现它。缩放可以通过使用适当的逻辑和'background-size' CSS属性轻松完成。我已经实施了平移。将两者加在一起会产生所需的功能。如果你提供了一些相关的代码,我可能会考虑看看它。 –

回答

8

我已经放在一起的jsfiddle它做什么,我想你想要做的事。

http://jsfiddle.net/CqcHD/2/

它满足您的条件的所有4。让我知道,如果我误解了你的预期结果

+0

非常感谢。抱歉耽搁了。我使用你的代码,甚至在生产环境中部署它:http://www.jungledragon.com/image/2638/caiman_in_camouflage.html/zoom它的工作原理合理,但平移仍然存在问题:放大时,似乎我不能平移到图像的外边缘,它似乎裁剪。有任何想法吗? – Ferdy

+0

我看不到你的javascript,因为它全部缩小了,所以这是完全的推测,但它看起来像在缩放的行为中,你将图像的左边部分从文档的左边界推出,而不是似乎想要平移文档视口的左边界 –

+0

啊,忘了关于缩小。这里是原始的js:http://www.jungledragon.com/js/slidedragon_001.js – Ferdy