在mouseleave上停止jquery的动画并返回到其原始状态



当悬停在div 上时,我试图缩放到 2.5。悬停时,它会启动动画,并在鼠标悬停时进入其原始动画。但问题是,当您将鼠标悬停在元素上并快速从div 中删除光标时,整个两个动画就完成了。喜欢它完全扩展到 2.5,然后回到 1。我希望如果我在它之间鼠标悬停,它正在动画,它应该停在它所在的位置并返回到比例 1。但无法做到这一点。

我正在使用jquery.transit

JSFIDDLE : http://jsfiddle.net/2swqN/3/

jquery是:

$(".zoomable").live({
mouseover: function() {
    console.log("hoverd");
    $(this).transition({
        //rotateY: '360deg',
        scale: 2.5,
    },2000);
},
mouseout: function() {
    console.log("hovered out");
    $(this).transition({
        //rotateY: '0deg',
        scale: 1,
    },2000);
}
});​

使用stop()似乎也不起作用,因为它有时会闪烁。

考虑到您没有使用回退,插件所做的只是创建 CSS3 转换。你可以自己做,不需要插件,或者任何JavaScript。

.zoomable {
    ...
    -webkit-transition: all 2s;
    -moz-transition: all 2s;
    -ms-transition: all 2s;
    -o-transition: all 2s;
    transition: all 2s;
}
.zoomable:hover {
    -webkit-transform: scale(2.5);
    -moz-transform: scale(2.5);
    -ms-transform: scale(2.5);
    -o-transform: scale(2.5);
    transform: scale(2.5);
}

js小提琴:http://jsfiddle.net/2swqN/14/

编辑以解决 CSS 过渡问题:

若要在动画完成后执行代码,可以使用 transitionEnd 事件。

$('.zoomable').on('transitionend webkitTransitionEnd oTransitionEnd otransitionend', function() {
    alert('Transition Complete');
});

演示:http://jsfiddle.net/2swqN/16/

要在单击时启动动画,请使用 jQuery 的 toggleClass() ,并将转换放在单独的类中。

$('.zoomable').on('click', function() {
    $(this).toggleClass('active');
});
.zoomable.active {
    /* css transforms here */
}

演示:http://jsfiddle.net/2swqN/17/

最新更新