2014-09-23 3 views
3

Im пытается выяснить, как сделать изображение, которое больше, чем масштаб окна браузера (2000x2800px) при инициализации jquery.panzoom. Мне нужно изображение для изменения размера, чтобы оно соответствовало высоте контейнера.Изменение размера по высоте jquery.panzoom

Заканчивать этот jsFiddle: http://jsbin.com/raxejirubayu/1/edit?html,css,js,output

Любой человек с любым опытом использования panzoom в состоянии помочь мне? Виртуальное пиво и персики даны взамен.

ответ

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

+0

Я думаю, что это сработает, так как я не использую оригинальную ширину и высоту изображения в вычислениях панорамирования, они пересчитываются после уменьшения изображения. –

+0

Я обнаружил, что в то время как масштабирование работает нормально, последующее панорамирование, кажется, не имеет эффекта, и изображение расположено справа от окна просмотра, а не посередине. Я не понимаю, как это исправить. http://stackoverflow.com/questions/32583854/jquery-panzoom-plugin-positioning-image-on-right-with-containinvert?lq=1 –

Смежные вопросы