【问题标题】:CSS3 transition with jQuery .addClass and .removeClass使用 jQuery .addClass 和 .removeClass 的 CSS3 过渡
【发布时间】:2018-03-10 01:29:55
【问题描述】:

我有一个很大的主导航面板,我想在它部署(展开)时为其设置动画。

我正在使用 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;  
}

过渡效果根本不起作用。

【问题讨论】:

  • 如果你也使用jQueryUI,你可以用addClass RemoveClass 和其他东西做动画

标签: jquery html css


【解决方案1】:

我厌倦了这个问题,最好使用动画:

.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 类 .animation 及其工作:

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

【讨论】:

  • 这里所有解决方案的最佳性能和最简单的实施,imo。
【解决方案2】:

您正在添加和删除包含过渡 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;
}

【讨论】:

【解决方案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/

【讨论】:

  • 您的回答非常合乎逻辑,我没有意识到这一点,您是对的。虽然,我应用了它,但没有显示过渡
  • 然后,您需要提供一些 HTML 和/或工作演示。
  • 我现在正在使用 jquery easing 插件,看来我可以使用它了
【解决方案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);        
    
    });
    });
    

    【讨论】:

    • 做得很好,但是……如今,css 过渡被认为是制作动画的方式。超级简单的 jquery 代码,添加和删除类,然后是 css 中的所有动画属性。
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2013-08-14
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多