更好的解决方案暂时抑制'mouseleave'

时间:2011-12-08 13:33:51

标签: jquery hover jquery-hover

基本上我在点击一个元素后取消绑定mouseleave。但我希望此元素的mouseleave - 事件再次工作单击另一个元素时。我的代码工作正常,但感觉很笨,因为我在代码中重复播放动画。

除了解除绑定和“重新绑定”之外,没有其他方法可以暂时压缩mouseleave吗?有什么建议吗?

Here's my example on jsfiddle

HTML

<div class="container">
 CONTAINER ONE
</div>

<div class="container">
 CONTAINER TWO
</div>

JS:

$(document).ready(function()
{
    //the default hover-event
    $('.container').hover(
        function(){
              $(this).stop().animate({'padding-bottom':'10px'},{queue:false,duration:160});
        },
        function() {
              $(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
        }
    );



    $('.container').click(function(e) {
        e.preventDefault();

        // enables the mouseleave for all other `.container`s again.
        // also bring the old clicked element into unhovered position again
        $('.container')
                .bind('mouseleave',function() {
                    $(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
                }).not(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});

        // supress the mouseleave for the clicked element
            $(this).unbind('mouseleave');
    })

});

1 个答案:

答案 0 :(得分:2)

这可能是更好的方法(example):

$(document).ready(function()
{
    var over = function(){
        $(this).stop().animate({'padding-bottom':'10px'},{queue:false,duration:160});
    };
    var out = function() {
        $(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
    };
    //the default hover-event
    $('.container').hover(over, out);



    $('.container').click(function(e) {
        e.preventDefault();

        // enables the mouseleave for all other `.container`s again.
        // also bring the old clicked element into unhovered position again
        $('.container').bind('mouseleave', out).not(this).each(out);

        // supress the mouseleave for the clicked element
        $(this).unbind('mouseleave');
    })
});