图像交换与JQuery之间的定时转换?

时间:2012-05-29 03:16:38

标签: javascript jquery image

我有这段代码:

$('.pic_windows img').mouseenter(function () {
    $(this).effect('shake', {
        times : 4,
        distance : 5
    }, 15).attr('src', $(this).attr('src').replace(/.jpg/, '-1.jpg'))
});

$('.pic_windows img').mouseleave(function () {
    $(this).attr('src', $(this).attr('src').replace(/-1.jpg/, '.jpg'))
});

我正在使用JQuery的.attr来交换图像,但我希望在大约1秒的时间内进行交换。我已经google了这个并获得了所有这些复杂的“CSS3过渡与JQuery后备”教程。有没有办法'动画'.attr变化?

我想我应该做一个fadeOut,而另一个fadeIn但我不知道如何写它,因为我几乎是一个完整的JQuery新手。我有几个这样的过渡在几页的过程中做。如果我只需要为一个实例编写这个,那就太好了。

更新在mouseenter上,图像抖动,然后在此抖动期间,应从一张图片淡入其交换的图片。在mouseleave上,图像应该淡出回原始图片。不幸的是,我还发现震动效果在IE,所有版本以及图像交换(它根本看不到图像2)上打破了

1 个答案:

答案 0 :(得分:2)

不,您无法为属性更改设置动画。你可以做的是克隆一个元素,改变一个属性并在它们之间转换。

var target = $(this).fadeOut();
var src = target.attr('src').replace(/-1.jpg/, '.jpg');
var copy = target.clone()
    .attr('src', src)
    .hide()
    .insertAfter(target)
    .fadeIn();

编辑:感谢您澄清您的意图,我建议您不要使用'src',这实际上需要构建一个小的有状态插件。相反,在这里坚持所需的效果,在悬停时显示图像。 jsFiddle

<强> HTML

<div class="shaker">
    <img src="http://lorempixel.com/output/nature-q-c-360-240-3.jpg" />
    <img class="hover" src="http://lorempixel.com/output/technics-q-c-360-240-9.jpg" />
</div>​

<强> CSS

.shaker {
    position: relative;
}
.shaker img {
    position: absolute;
}
.hover {
    display: none;
}

<强> JS

$('.shaker').hover(function () {
    $(this).effect('shake', {
        times: 4,
        distance: 5
    }, 15);
    $(this).find('.hover').fadeIn();
}, function () {
    $(this).find('.hover').stop().fadeOut();
});​

http://jsfiddle.net/eHQ3t/13/