使用jQuery时的图像动画问题.animate()

时间:2012-10-30 17:24:18

标签: javascript jquery image animation jquery-animate

我有一个我需要解决的图像动画问题。当用户将鼠标悬停在图像上时,图像的大小会增加。当用户从图像中移出时,图像应返回其原始大小。

问题:当用户快速移出和移出图像时,图像将会扩展并开始变形,或者更改为完全不同的大小。然后,当鼠标悬停在图像上时,它会继续动画。

以下是问题JSFiddle

我在mouseover方法中使用mouseout.on()事件遇到了同样的问题。同时在.on()方法

中将这些事件链接在一起

HTML:

<div id="content">
<img id="foo" src="http://www.nasa.gov/images/content/297522main_image_1244_946-710.jpg"  alt="" title="" />

jQuery的:

jQuery('#content').on("hover", '#foo', function (e) {
    var $img = jQuery(this);
    var $imgWidth = $img.width();
    var $imgHeight = $img.height();
    var $imgTop = $img.position().top;
    if (e.type == "mouseenter") {
        $img.animate({
            top: $imgTop - 20,
            width: $imgWidth * 1.2,
            height: $imgHeight * 1.2
        }, 200);
    } else if (e.type == "mouseleave") {
        $img.animate({
            top: $imgTop + 20,
            width: $imgWidth / 1.2,
            height: $imgHeight / 1.2
        }, 200);
    }
});

1 个答案:

答案 0 :(得分:4)

每次将鼠标悬停在图像上时,即使图像处于动画状态,也会得到图像的宽度和高度,因此当前值并不是您想要的值。

相反,存储原始值并对其进行处理:

jQuery('img').load(function() {
    var $this = jQuery(this);

    $this.data({
        'orig-width': $this.width(),
        'orig-height': $this.height(),
        'orig-top': $this.position().top
    });
});

jQuery('#content').on("hover", '#foo', function(e) {
    var $this = jQuery(this);

    if (e.type == "mouseenter") {
        $this.stop().animate({
            top: $this.data('orig-top') - 20,
            width: $this.data('orig-width') * 1.2,
            height: $this.data('orig-height') * 1.2
        }, 200);
    } else if (e.type == "mouseleave") {
        $this.stop().animate({
            top: $this.data('orig-top'),
            width: $this.data('orig-width'),
            height: $this.data('orig-height')
        }, 200);
    }
});​

演示:http://jsfiddle.net/TbDrB/5/