2011-08-25 25 views

回答

2

看起来脚本阻止给topleft值小于0,如果将逻辑更改为允许val UE的< 0你应该得到一个集中变焦...

更改此

iTop = (iNewH < ipH ? (ipH/2) - (iNewH/2) : 0); 
iLeft = (iNewW < ipW ? (ipW/2) - (iNewW/2) : 0); 

对此

iTop = (ipH/2) - (iNewH/2); 
iLeft = (ipW/2) - (iNewW/2); 

编辑:

允许滚动的所有部分图像(即没有负面定位)你可以使用ScrollTo jquery插件

example fiddle

if (iNewH > $container.height() || iNewW > $container.width()) { 
    $container.scrollTo({ 
     top:(iNewH - $container.height())/2, 
     left:(iNewW - $container.width())/2 
    }); 
} 

可能会考虑改变上述逻辑来分别处理高/宽,我会留给你。

+0

但我不希望图像通过负向顶部和左侧切断。滚动条应移动到必要的位置以使其位于框架的中心。 – sadmicrowave

+0

更新我的回答 – MikeM

+0

好主意,但我实现了它,它仍然没有滚动到所需的位置。 – sadmicrowave

1

这里是一个小提琴:http://jsfiddle.net/maniator/jhDhM/

它可能需要一些调整。

这里是小提琴的js代码:

var zoomFactor = 1; 

$('#container img').click(function(e) { 

    var iScaler = 1.5, 
     iH = $(this).height(), 
     iW = $(this).width(), 
     iNewH = iH * iScaler, 
     iNewW = iW * iScaler, 
     $parent = $(this).parent(), 
     zoomPosX = (e.clientX - ($parent.width()/2))/zoomFactor, 
     zoomPosY = (e.clientY - ($parent.height()/2))/zoomFactor; 
    zoomFactor *= iScaler; 
    $(this).css({ 
     top: zoomPosY + 'px', 
     left: zoomPosX + 'px', 
     width: iNewW + 'px', 
     height: iNewH + 'px' 
    }); 

}); 

在您的版本:http://jsfiddle.net/maniator/RCw4T/10/

修复该小于大于混合了,你应该去正确中心所有的时间:-)

相关问题