CSS 不透明度过渡立即切换为零
CSS opacity transition switch to zero immediately
我无法弄清楚为什么同一元素上的复合过渡(不透明度和高度)没有遵循预期的持续时间。然而,这个问题只发生在第一次运行,然后开始完美运行。
更新:
我找到了一个更简单的方法来演示这个问题。
点击"start"按钮,右边的框立即变透明,不会像左边那样慢慢变淡
$("button").on("click", function() {
doNative();
doJQuery();
});
function doNative() {
const elem = document.getElementById("bn");
elem.style.opacity = 0;
elem.style.height = 0;
elem.style.transitionDuration = "2s";
elem.style.transitionProperty = "opacity, height";
}
function doJQuery() {
const elem = $("#bj");
elem.css({
opacity: 0,
height: 0,
"transition-duration": "2s",
"transition-property": "opacity, height",
});
}
.block {
width: 200px;
font-size: 24px;
font-family: Tahoma;
display: inline-block;
margin: 10px;
border: 1px solid gray;
}
.initial {
opacity: 1;
height: 200px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div>
<button>start</button>
</div>
<div>
<div class="block">
<div id="bn" class="initial">This box is collapsed using the native transition API</div>
</div>
<div class="block">
<div id="bj" class="initial">This box is collapsed using the jQuery transition API</div>
</div>
</div>
遗留内容(不再相关):
这里只是描述上下文的片段:
items.css({
opacity: 0,
height: 0,
"transition-duration": transitionDuration + "ms",
"transition-property": "opacity, height"
});
为了更好地阐明实际行为和预期行为,请查看此笔:https://codepen.io/highfield/pen/dKLKKo
一旦 运行,按下 "hide" 按钮,"Items" 块立即消失,但预期的行为是沿着一定的时间间隔淡出。
在这个初始的怪异阶段之后,"show" 和 "hide" 函数的行为完全符合预期。
我还注意到,通过从 "transition-property" CSS 字段中删除 "height",不透明度会正确淡化。
如何解决这个问题?
在执行任何过渡之前,必须在目标元素上设置过渡属性。为了使初始动画也能正常工作,您应该为 CSS.
中的 #s1
元素设置一个基本的过渡定义。
终于找到问题所在了
似乎字段的顺序很重要,但我不明白为什么本机版本可以正常工作,即使是随机顺序。通过如下更改 jQuery 版本,转换行为正确:
function doJQuery() {
const elem = $("#bj");
elem.css({
"transition-duration": "2s",
"transition-property": "opacity, height",
opacity: 0,
height: 0,
});
}
我无法弄清楚为什么同一元素上的复合过渡(不透明度和高度)没有遵循预期的持续时间。然而,这个问题只发生在第一次运行,然后开始完美运行。
更新:
我找到了一个更简单的方法来演示这个问题。
点击"start"按钮,右边的框立即变透明,不会像左边那样慢慢变淡
$("button").on("click", function() {
doNative();
doJQuery();
});
function doNative() {
const elem = document.getElementById("bn");
elem.style.opacity = 0;
elem.style.height = 0;
elem.style.transitionDuration = "2s";
elem.style.transitionProperty = "opacity, height";
}
function doJQuery() {
const elem = $("#bj");
elem.css({
opacity: 0,
height: 0,
"transition-duration": "2s",
"transition-property": "opacity, height",
});
}
.block {
width: 200px;
font-size: 24px;
font-family: Tahoma;
display: inline-block;
margin: 10px;
border: 1px solid gray;
}
.initial {
opacity: 1;
height: 200px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div>
<button>start</button>
</div>
<div>
<div class="block">
<div id="bn" class="initial">This box is collapsed using the native transition API</div>
</div>
<div class="block">
<div id="bj" class="initial">This box is collapsed using the jQuery transition API</div>
</div>
</div>
遗留内容(不再相关):
这里只是描述上下文的片段:
items.css({
opacity: 0,
height: 0,
"transition-duration": transitionDuration + "ms",
"transition-property": "opacity, height"
});
为了更好地阐明实际行为和预期行为,请查看此笔:https://codepen.io/highfield/pen/dKLKKo
一旦 运行,按下 "hide" 按钮,"Items" 块立即消失,但预期的行为是沿着一定的时间间隔淡出。 在这个初始的怪异阶段之后,"show" 和 "hide" 函数的行为完全符合预期。
我还注意到,通过从 "transition-property" CSS 字段中删除 "height",不透明度会正确淡化。
如何解决这个问题?
在执行任何过渡之前,必须在目标元素上设置过渡属性。为了使初始动画也能正常工作,您应该为 CSS.
中的#s1
元素设置一个基本的过渡定义。
终于找到问题所在了
似乎字段的顺序很重要,但我不明白为什么本机版本可以正常工作,即使是随机顺序。通过如下更改 jQuery 版本,转换行为正确:
function doJQuery() {
const elem = $("#bj");
elem.css({
"transition-duration": "2s",
"transition-property": "opacity, height",
opacity: 0,
height: 0,
});
}