tags:

views:

37

answers:

3

I've the next problem: I've got a div which contains an image.

I need this image resized if is bigger than the width of the div, and if the user click the image, show it at the full size.

The div width is managed with the windows width.

How do I do that?

A: 

jQuery.popeye is a slick plugin for doing interactions like this.

jmar777
Yeah but i don't want to show the full sixe image in a modal...just change the size.
Sein Kraft
A: 

Jquery imagefit can be used + a modal popup box of choice

Nealv
Example doesn't work.
Sein Kraft
+1  A: 

You can use the .css() function to set the size of the image, or if you want to make it a bit spiffier, you can use .animate() to animate the change.

Say your image's id is #myimage, this is how you would do it.

$("#myimage").click(function(){
   var imgWidth=    $(this).css("width");
   var imgHeight =  $(this).css("height");
   //Checks if the image is already in original size:
   if(imgWidth == originalWidth && imgHeight == originalHeight)
   {
       resizeImage();
   }
   else
   {
       $(this).css({width:originalWidth, height: originalHeight});
   }

});

This assumes you already saved away the original size of the image, since otherwise, there's no way to calculate how big the picture used to be.

EDIT:

Assume your div's id is #mydiv

the $(document).ready() is called when the page finishes loading.

function resizeImage()
{
        var imgWidth=    $("#myimage").css("width");
        var imgHeight =  $("#myimage").css("height");
        var divWidth = $("#mydiv").css("width") ;
        var divHeight = $("#mydiv").css("height") ;
        originalHeight = imgHeight;
        originalWidth=imgWidth;

        if (imgWidth > divWidth && imgHeight > divHeight)
        {
            var heightDiff = imgHeight  - divHeight;
            var widthDiff = imgWidth  - divWidth;
            //First find out which of the two dimensions is MORE boundry stretching, then we only change that dimension, to keep the image's original proportions.
            if(heightDiff>widthDiff)
            {
                $("#myimage").css("height", divHeight); //Set the
            }
            else
            {
                $("#myimage").css("width", divWidth); //Set the width to the div's width
            }
        }
        else if(imgWidth > divWidth)
        {
            $("#myimage").css("width", divWidth); //Set the width to the div's width
        }
        else if (imgHeight > divHeight)
        {
            $("#myimage").css("height", divHeight); //Set the height to the div's height
        }
}

$(document).ready(function(){
    resizeImage();
});
Razor Storm
Yes, that is for set the original size, but how do you first set a lower size in the load to fit the image in the div?
Sein Kraft
I added an edit to explain how to set the image's width/height. It seems kinda complicated because I added a check in case both the height AND the width are too big. In that case, the script will check which one exceeds the div MORE and only change that dimension, this way it keeps the original proportions of the image.
Razor Storm
Only is misses the click function to swap between zoomed image and normal.
Sein Kraft
There's two ways to go about it, what I did was make resizeImage into a function, and then onclick it checks whether the image is already in original size, if so it calls resizeImage, otherwise, it changes image to original size. The other way is to store the image's resized size into two variables, and then set it with that.
Razor Storm