2014-09-23 124 views

回答

2

我已经通过编写此javascript代码修复了此问题,它基本上根据图像大小和容器大小计算缩放和平移参数,并应用转换以使图像拉伸到容器边界。

JavaScript文件

$(document).ready(function(){ 
    $panzoom = $(".cimage").panzoom(); 

    //Wait for the image to load 
    $('.cimage').load(function(){ 
     //Get container and image 
     var image = $('.cimage'); 
     var container = $('.image-container'); 

     //Get container dimensions 
     var container_height = container.height(); 
     var container_width = container.width(); 

     //Get image dimensions 
     var image_height = image.height(); 
     var image_width = image.width(); 

     //Calculate the center of image since origin is at x:50% y:50% 
     var image_center_left = image_width/2.0; 
     var image_center_top = image_height/2.0; 

     //Calculate scaling factor 
     var zoom_factor; 

     //Check to determine whether to stretch along width or heigh 
     if(image_height > image_width) 
      zoom_factor = container_height/image_height; 
     else 
      zoom_factor = container_width/image_width; 

     //Zoom by zoom_factor 
     $panzoom.panzoom("zoom", zoom_factor, {animate: false}); 

     //Calculate new image dimensions after zoom 
     image_width = image_width * zoom_factor; 
     image_height = image_height * zoom_factor; 

     //Calculate offset of the image after zoom 
     var image_offset_left = image_center_left - (image_width/2.0); 
     var image_offset_top = image_center_top - (image_height/2.0); 

     //Calculate desired offset for image 
     var new_offset_left = (container_width - image_width)/2.0; 
     var new_offset_top = (container_height - image_height)/2.0; 

     //Pan to set desired offset for image 
     var pan_left = new_offset_left - image_offset_left; 
     var pan_top = new_offset_top - image_offset_top; 
     $panzoom.panzoom("pan", pan_left, pan_top); 

    }); 
}); 

HTML文件

<div class="image-container"> 
    <img class='cimage' src="abc.jpg'/> 
</div> 

它沿着宽度或高度拉伸,根据图像方向(纵向或横向),但如果你只想要舒展沿高度则需要更换

if(image_height > image_width) 
    zoom_factor = container_height/image_height; 
else 
    zoom_factor = container_width/image_width; 

zoom_factor = container_height/image_height; 

但我会建议反对,因为这将不能够处理图像的景观。

+0

这确实提供了混合的结果以及相对较大的图像以及移动设备。似乎泛计算需要一点调整 – Starboy 2015-05-06 01:09:38

+0

我认为这将工作,因为我没有在平移计算中使用原始图像宽度和高度,他们在图像缩小/放大后重新计算。 – 2015-05-07 08:37:50

+0

我发现虽然缩放工作正常,但随后的平移似乎没有效果,并且图像位于视口的右侧,而不是中间位置。我看不出如何解决这个问题。 http://stackoverflow.com/questions/32583854/jquery-panzoom-plugin-positioning-image-on-right-with-containinvert?lq=1 – 2015-09-18 12:57:15

相关问题