【问题标题】:image hover zoom DELAY like google images图像悬停缩放 DELAY 像谷歌图像
【发布时间】:2011-10-25 06:04:15
【问题描述】:

我从一个视频教程中写了关于 js 的代码,但是动画之前没有延迟。 我用 delay() 和 setTimeout() 尝试了很多方法,但没有得到需要的结果...

如果有人可以帮助我?请这样做:)

对此我将不胜感激。

这是可以在线编辑和运行的代码:http://jsfiddle.net/S2svG/

这是 js 代码:

$(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
                }
            }]
        });                    
});     

【问题讨论】:

  • 使用 delay() 得到什么结果?鼠标移动时是否延迟但不取消?
  • 他说,“但动画之前没有延迟”:-)

标签: javascript jquery hover zooming delay


【解决方案1】:

这是你需要的吗:

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

干杯

【讨论】:

  • 是的,看起来像我想要的,除了一个小细节:在缩放之前鼠标移开,图像无论如何都会缩放。这个视频在这里:youtube.com/watch?v=cngMj-pyr3U
  • 我刚刚编辑了我的答案,新小提琴,添加了一行代码,中断了动画 -> $div.stop().animate();
  • 如果你能在基辅(乌克兰)参加 2012 年欧洲杯,我会给你饺子和罗宋汤,如果你想要我们的伏特加)))
【解决方案2】:

如果您希望鼠标悬停事件和动画之间有延迟,您可能需要查看hoverIntent jQuery plugin

hoverIntent 是一个插件,它试图确定用户的 意图......就像一个水晶球,只有鼠标移动!它像 (并且源自)jQuery 的内置悬停。然而,而不是 立即调用 onMouseOver 函数,它一直等到 用户的鼠标在拨打电话之前已经足够慢了。

话虽如此,您可能想看看jQuery.delay()Demo here.

【讨论】:

  • 与上面相同的问题:看起来像我想要的,除了一个小细节:在缩放之前鼠标移开,图像无论如何都会缩放。这个视频在这里:youtube.com/watch?v=cngMj-pyr3U
  • 我不推荐额外的插件,小但仍然 1,4K 来自你想要的简单的东西
  • @Sylvio:你是对的。几分钟前我添加了另一种方法。
  • 但是如何解决鼠标悬停在 1 秒前的缩放问题??? youtube.com/watch?v=cngMj-pyr3U
  • @Vitali:我认为这就像在必要时添加.stop() 一样简单。一分钟后检查更新的小提琴(修订版 54)。
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2016-01-18
  • 2015-06-01
  • 2016-06-25
  • 2020-03-13
相关资源
最近更新 更多