gpt4 book ai didi

javascript - 追加元素后 CSS 过渡不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:48 24 4
gpt4 key购买 nike

我遇到了 CSS 转换问题,在尝试其他操作之前,我想了解问题所在。

容器中有 3 个框和一个“下一步”按钮。目标是下一个框顶部出现在顶部,并在按下“下一步”按钮时淡入。该框通过将其附加到容器定位在顶部,以便它作为最后一个元素添加,因此在顶部可见,并且应该通过 css 过渡淡入。

问题是 css 转换似乎在附加框后不起作用。如果在未附加的框元素上进行测试,CSS 转换效果很好。

Fiddle here ,代码如下:

HTML:

<div class="container">
<div class="box red"></div>
<div class="box blue"></div>
<div class="box green"></div>
</div>

<div id="next">Next</div>

JS:

var container = $(".container");

// Save the current list order
var list = container.children(".box");
// The current index
var current = 0;

// Put the first on top
container.append(list[0]);

function next() {
// Figure out what is the index of the next box
if (current + 1 < list.length) current++;
else current = 0;

// Save it in a variable
var target = $(list[current]);

// Put it on top
container.append(target);

// Hide it and then fade it in
target.css("opacity", 0).css("transition", "opacity 1000ms ease-out").css("opacity", 1);

// The fading in is not working
}

$("#next").click(next);

更新:

此问题的基本解决方案是在将不透明度设置为 0 之后和设置过渡 css 之前在目标上调用 offset():

target.css("opacity", 0);
target.offset();
target.css("transition", "opacity 1000ms ease-out").css("opacity", 1);

Updated version of the above fiddle here

最佳答案

“列表”变量是一个 jQuery 对象,但是您作为“目标”从中提取的元素不是 jQuery 对象——它们是 DOM 节点。因此,您对“.css()”的调用失败(在我的错误控制台中报告)。

一旦你解决了这个问题,接下来就是浏览器如何处理一系列 CSS 更新的问题。我不清楚我到底看到了什么(来自 Linux 上的 Firefox 18),但我认为基本问题是因为在更改之间没有进行布局重排,最终效果是样式被“折叠”,因此没有净变化。

this update to the fiddle我采取了不同的方法。我把过渡规则放在“box”类中,然后添加了一个“prefade”类:

.prefade {
transition-duration: 0;
opacity: 0;
}

然后,我没有弄乱元素样式,而是在追加之前添加“prefade”,然后通过询问元素的偏移量来触发布局更新。然后我可以删除“prefade”类,然后框淡入。

target.addClass('prefade');
// Put it on top
container.append(target);

var p = target.offset();

target.removeClass('prefade');

我不知道这是否是“正确”的做事方式。 编辑 — 为了使其在 Chrome 中工作,需要使用 -webkit- 前缀重复“transition”属性。

关于javascript - 追加元素后 CSS 过渡不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654803/

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