CSS最大高度过渡双动画错误在webkit



参见这个JSFiddle,例如:http://jsfiddle.net/6ocawwqd/21/

Stack Overflow坚持要我包含我链接到的代码,所以这里是JS和CSS:

$(document).on('click', '.show', function () {
    $('.reveal')[0].style.removeProperty('display');
    var height = $('.reveal')[0].scrollHeight;
    $('.reveal').css({ 'max-height': height, 'overflow':'hidden' });
    $('.reveal').removeClass('hide');
    setTimeout(function() {
        $('.reveal')[0].style.removeProperty('overflow');
        $('.reveal')[0].style.removeProperty('max-height');
    }, 501);
});
$(document).on('click', '.hide', function () {
    var height = $('.reveal')[0].scrollHeight;
    $('.reveal').css({'max-height': height, 'overflow':'hidden' });
    setTimeout(function() {
        $('.reveal').addClass('hide');
    }, 5);
    setTimeout(function() {
        $('.reveal').css('display', 'none');
    }, 505);
});

.CSS

 a {
        color:blue;
        cursor:pointer;
    }
    .reveal {
        width:250px;
        background-color:#ccc;
        padding:10px;
        transition: all .5s;
        overflow:hidden;
        translate3d(0,.01%,0);
    }
    .reveal.hide {
        max-height:0 !important;
        padding-top:0;
        padding-bottom:0;
    }

基本问题:我有一个小部件,我需要隐藏/显示其高度未知。隐藏时,必须将显示设置为"无"以避免选项卡索引和表单验证问题。所以我使用 max-height 属性来利用 CSS 过渡来设置隐藏和显示的动画,并将显示从"无"切换到"块"(或者只是通过从元素中删除显示属性来切换到默认值。所描述的问题在任何一种情况下都会发生)。

在我的测试中,我只在OSX Safari,iOS上的Chrome和Safari以及Android Stock移动浏览器中获得双重动画。(它适用于Windows Chrome,FF,IE11,Android Chrome)

我已经确定了双重动画何时发生。第一个动画是正确的,当通过 JavaScript 将 max-height 属性从 0 更改为内容高度时,就会发生第一个动画。

第二个动画发生在动画完成后使用计时器删除最大高度属性时。 我必须删除最大高度,因为在可见之后,元素可能会添加更多项目,因此必须允许增长。

有没有人遇到过这种情况或有解决方案?

我遇到了类似的问题,但发现很多背面可见性:隐藏的建议并没有解决iOS的问题。

由于您已经在使用 JavaScript 设置/取消设置高度属性,因此您可以尝试在动画之前和动画完成后将额外的"animating"类切换到元素。如果您在删除高度(或将其设置回"自动")之前执行此操作,iOS 将不会尝试重新设置导致闪烁的高度属性的动画。

以您的 http://jsfiddle.net/m2adrugn/2/为例:

$(document).on('click', '.show', function () {
    $('.reveal')[0].style.removeProperty('display');
    var height = $('.reveal')[0].scrollHeight;
    $('.reveal').css({ 'max-height': height, 'overflow':'hidden' });
    $('.reveal').addClass('animating').removeClass('hide');
    setTimeout(function() {
        $('.reveal').removeClass('animating');
        $('.reveal')[0].style.removeProperty('overflow');
        $('.reveal')[0].style.removeProperty('max-height');
    }, 501);
});
$(document).on('click', '.hide', function () {
    var height = $('.reveal')[0].scrollHeight;
    $('.reveal').addClass('animating').css({'max-height': height, 'overflow':'hidden' });
    setTimeout(function() {
        $('.reveal').addClass('hide');
    }, 5);
    setTimeout(function() {
        $('.reveal').css('display', 'none').removeClass('animating');
    }, 505);
});

.CSS

    a {
        color:blue;
        cursor:pointer;
    }
    .reveal {
        width:250px;
        background-color:#ccc;
        padding:10px;
        overflow:hidden;
        translate3d(0,.01%,0);
    }
    .reveal.animating {
        transition: all .5s;        
    }
    .reveal.hide {
        max-height:0 !important;
        padding-top:0;
        padding-bottom:0;
    }

将最大高度更改为高度。为我工作。

相关内容

  • 没有找到相关文章