gpt4 book ai didi

javascript - CSS3 转换似乎需要 "warmup"时间才能开始?我必须加等待吗?

转载 作者:行者123 更新时间:2023-11-28 09:01:21 26 4
gpt4 key购买 nike

我有一个 CSS3 过渡,我在其中缩小了元素的高度。我这样做是:

  1. 类中指定的 CSS3 过渡和目标高度(例如类中的高度:5 像素)
  2. 将 height=$el.height() 分配给 style 属性中的元素(例如 height:100px on style)
  3. 给元素添加类
  4. 移除样式属性中定义的高度
  5. 计算出的 CSS 值从样式的 100px 变为类的 5px,这会触发转换

我发现设置 CSS3 转换触发器似乎有延迟,如果在步骤 #3 之后太快完成步骤 #4,触发器将看到高度最初是自动的而不是 100px,并且没有过渡发生(由于 CSS3 的另一个限制,您不能从 height:auto 过渡到 height:x)。

这是实际的代码:

$(document).ready(function() {
$a = $('#box'); // height:auto, not specified
$a.css('height',$a.height()); // height:100px on style;
$a.addClass('shrink'); // height:100px on style, height:5px on class
$a.css('height',''); // height removed from style, falls back to 5px on class
});

这是一个演示问题的 JSFiddle:http://jsfiddle.net/1escyLqf/2/

在 fiddle 中,如果我在删除高度值之前添加 20 毫秒的延迟,则过渡有效。如果您注释掉该行并在添加类后立即调用 css('height',''),则速度太快并且不会发生转换。

这是浏览器实现 CSS3 转换的错误吗?或者我真的需要添加超时吗?

最佳答案

使用附加在 jQuery 中的具有动态起始高度的 CSS3 动画创建此对象。

jQuery

  1. 获取框的高度:

    var boxHeight = $('#box').height();
  2. 创建动画并将其应用于收缩类。从变量中获取起始高度。

    var animation = '
    <style type="text/css">
    .shrink {
    -webkit-animation: shrink 12s forwards;
    animation: shrink 12s forwards;
    }

    @-webkit-keyframes shrink {
    0% {
    height:' + boxHeight + 'px;
    }
    100% {
    height: 5px;
    }
    }
    @keyframes shrink {
    0% {
    height:' + boxHeight + 'px;
    }
    100% {
    height: 5px;
    }
    }
    </style>';
  3. 将样式附加到 <head>

    $('head').append(animation);

完整示例

$(document).ready(function() {
var boxHeight = $('#box').height();

var animation = '<style type="text/css"> .shrink { -webkit-animation: shrink 12s forwards; animation: shrink 12s forwards; } @-webkit-keyframes shrink { 0% { height:' + boxHeight + 'px; } 100% { height: 5px; } } @keyframes shrink { 0% { height:' + boxHeight + 'px; } 100% { height: 5px; } }</style>';

$('head').append(animation);
});
#box,
#box2 {
background: red;
margin: 10px;
}
.shrink {
overflow: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="box" class="shrink">
<p>make height</p>
<p>make height</p>
<p>make height</p>
<p>make height</p>
</div>

关于javascript - CSS3 转换似乎需要 "warmup"时间才能开始?我必须加等待吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com