Переход CSS3 с jQuery.addClass и .removeClass

У меня есть большая основная панель навигации, которую я хочу оживить, когда она развертывается (расширяется).

Я работаю с jQuery, чтобы вызвать видимость этого, добавляя/удаляя класс видимым/скрытым.

Мне пришлось установить время задержки для применения скрытого класса, потому что триггер - это кнопка за пределами панели div. (если я использовал опрокидывание кнопки, как только вы развернете панель, она исчезнет)

Код - это

$(document).ready(function() {
    $('#menu-item-9').click(function(){
        $('#repair-drop').removeClass('hidden');
        $('#repair-drop').addClass('visible');
    });
$('#repair-drop').on('mouseleave', function(e) {
    setTimeout(function() {
        $('#repair-drop').removeClass('visible').addClass('hidden');
    }, 600);        

});
});

Мой CSS выглядит следующим образом

.hidden{
    max-height: 0px;
    -webkit-transition: max-height 0.8s;
    -moz-transition: max-height 0.8s;
    transition: max-height 0.8s;

}
.visible{
    max-height: 500px;  
}

Эффект перехода вообще не работает.

Ответы

Ответ 1

Вы добавляете и удаляете класс, содержащий CSS перехода. Я рекомендую переместить это в свое собственное правило DEMO.

.hidden{
    max-height: 0px;
}
.visible{
    max-height: 500px;  
}

#repair-drop{
    -webkit-transition: max-height 0.8s;
    -moz-transition: max-height 0.8s;
    transition: max-height 0.8s;
}

Ответ 2

Я устал от этой проблемы, лучше использую анимацию:

.container .element.animation  {
    animation: SHW .5s;
    animation-fill-mode: both
}
@keyframes SHW {
    from {
        transform:scale(0.7);
        opacity:0
    }
    to {
        transform: scale(1);
        opacity:1
    }
}

Добавьте только к классу .element класса. и его работе:

$('.container .element').addClass('animation');

Ответ 3

Не удаляйте класс .hidden; он содержит стили transition. Просто добавьте и удалите класс .visible.

$(document).ready(function() {
    $('#menu-item-9').on('click', function(e) {
        $('#repair-drop').addClass('visible');
    });

    $('#repair-drop').on('mouseleave', function(e) {
        setTimeout(function() {
            $('#repair-drop').removeClass('visible');
        }, 600);        
    });
});

http://jsfiddle.net/mblase75/LjhNa/


Тем не менее, вам может потребоваться улучшить ваше решение для учетной записи для пользователей, быстро вытеснивших #repair-drop и нажав #menu-item-9, прежде чем он сможет скрыть.

$(document).ready(function() {
    $('#menu-item-9').on('click', function(e) {
        $('#repair-drop').data('shown',true).addClass('visible');
    });

    $('#repair-drop').on('mouseleave', function(e) {
        $('#repair-drop').data('shown',false);
        setTimeout(function() {
            if (!$('#repair-drop').data('shown')) {
                $('#repair-drop').removeClass('visible');
            }
        }, 600);        
    });
});

http://jsfiddle.net/mblase75/b8QpB/

Ответ 4

Рассматривали ли вы использование функций анимации JQuery UI? таких как

jQuery('#menu-item-9').hide({duration:200,effect:'blind'});

Вы также можете анимировать удаление класса, например

jQuery('#menu-item-9').removeClass('hidden', {duration:200,effect:'blind'});

Ответ 5

Я нашел способ сделать эту работу, используя плагин jquery easing. Спасибо всем за ваши ответы

$(document).ready(function() {
    $('#menu-item-9').click(function(){
        $('#repair-drop').removeClass('hide');
        $('#repair-drop').animate({"max-height":"500px", "padding-top":"20px", "opacity":"1"},1500, "easeOutCubic");
    });
$('#repair-drop').on('mouseleave', function(e) {
    setTimeout(function() {
        $('#repair-drop').animate({"max-height":"0px", "overflow":"hidden", "padding":"0px","opacity":"0"},2000, "easeOutCubic");

    }, 600);        

});
});