Search code examples
javascriptjqueryhoverzoomingdelay

image hover zoom DELAY like google images


There is code on js I've wrote from one video tutorial, but there is no delay before animation. I've tried a lot of methods with delay() and setTimeout(), but didn't get needed result...

If someone could help me? please do it:)

I'll be very appreciate for this.

Here is code with posibility of edditing and running online: http://jsfiddle.net/S2svG/

And here is that js code:

$(function(){

    $.fn.popOut=function(user_opts){            
        return this.each(function(){

            var opts=$.extend({
                useId:"poppedOut",
                padding:20,
                border:0,
                speed:200
            },user_opts);

            $(this).mouseover(function(){
                // kill any instance of this already
                $("#"+opts.useId).remove();

                // make a copy of the hovered guy
                var $div=$(this).clone();

                // setup for prelim stuff
                $div.css({
                    "position":"absolute",
                    "border":opts.border,
                    "top":$(this).offset().top,
                    "left":$(this).offset().left,
                    "-moz-box-shadow":"0px 0px 12px black",
                    "-webkit-box-shadow":"0px 0px 12px black",
                    "z-index":"99"
                });

                // store all of the old props so it can be animate back
                $div.attr("id",opts.useId)
                    .attr("oldWidth",$(this).width())
                    .attr("oldHeight",$(this).height())
                    .attr("oldTop",$(this).offset().top)
                    .attr("oldLeft",$(this).offset().left)
                    .attr("oldPadding",$(this).css("padding"));

                // put this guy on the page
                $("body").prepend($div);

                // animate the div outward
                $div.animate({
                    "top":$(this).offset().top-Math.abs($(this).height()-opts.height),
                    "left":$(this).offset().left-opts.padding,
                    "height":opts.height,
                    "padding":opts.padding
                },opts.speed);

                // loop through each selector and animate it to its css object
                for(var eachSelector in opts.selectors){
                    var selectorObject=opts.selectors[eachSelector];
                    for(var jquerySelector in selectorObject){
                        var cssObject=selectorObject[jquerySelector];
                        $div.find(jquerySelector).animate(cssObject,opts.speed);
                    }
                }

                $div.mouseleave(function(){
                    $("#"+opts.useId).animate({
                        width:$(this).attr("oldWidth"),
                        height:$(this).attr("oldHeight"),
                        top:$(this).attr("oldTop"),
                        left:$(this).attr("oldLeft"),
                        padding:$(this).attr("oldPadding")
                    },0,function(){
                        $(this).remove();
                    });
                });
            });
        });
    };
        $(".productBox").popOut({
            height:300,
            border:"1px solid #333",
            selectors:[{
                ".productDescription":{
                    height:150
                }
            }]
        });                    
});     

Solution

  • Is this what you need:

    http://jsfiddle.net/S2svG/48/

    Cheers