Лучшее решение для временного подавления мышиного выхода - PullRequest
0 голосов
/ 08 декабря 2011

В основном я отменяю привязку mouseleave после нажатия на элемент. Но я хочу, чтобы mouseleave -вент для этого элемента снова работал , когда щелкает другой элемент. Мой код работает, но он кажется громоздким, потому что я повторяю анимацию снова и снова в моем коде.

Нет ли другого способа временно приостановить mouseleave, кроме отмены и "повторного связывания"? Есть предложения?

Вот мой пример на 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 Ответ

2 голосов
/ 08 декабря 2011

Это может быть лучше ( пример ):

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