javascript - 通过 JavaScript 分配时,CSS 转换不起作用

标签 javascript css css-transitions

在尝试通过 JavaScript 将 CSS3 转换应用于幻灯片放映时,我感到非常头疼。

基本上,JavaScript 获取幻灯片放映中的所有幻灯片并将 CSS 类应用到正确的元素以提供漂亮的动画效果,如果没有 CSS3 过渡支持,它只会应用没有过渡的样式。

现在,我的“小”问题。一切都按预期工作,所有幻灯片都获得了正确的样式,代码运行没有错误(到目前为止)。但是指定的过渡不起作用,即使应用了正确的样式。此外,当我自己通过检查器应用样式和过渡时,它们会起作用。

由于我自己找不到合乎逻辑的解释,所以我认为这里有人可以回答,好吗?

我整理了一个代码示例:http://g2f.nl/38rvma 或者使用 JSfiddle(无图像):http://jsfiddle.net/5RgGV/1/

最佳答案

要使 transition 起作用,必须发生三件事。

  1. 元素必须明确定义属性,在本例中:opacity: 0;
  2. 元素必须定义过渡:transition: opacity 2s;
  3. 必须设置新属性:opacity: 1

如果您动态分配 1 和 2,就像您在示例中那样,则需要在 3 之前有延迟,以便浏览器可以处理请求。它在您调试时起作用的原因是您通过单步执行它来创建此延迟,让浏览器有时间进行处理。延迟分配 .target-fadein:

window.setTimeout(function() {
  slides[targetIndex].className += " target-fadein";
}, 100); 

或者将 .target-fadein-begin 直接放入您的 HTML 中,以便在加载时对其进行解析并为转换做好准备。

向元素添加 transition 不会触发动画,更改属性会。

// Works
document.getElementById('fade1').className += ' fade-in'

// Doesn't work
document.getElementById('fade2').className = 'fadeable'
document.getElementById('fade2').className += ' fade-in'

// Works
document.getElementById('fade3').className = 'fadeable'

window.setTimeout(function() {
  document.getElementById('fade3').className += ' fade-in'
}, 50)
.fadeable {
  opacity: 0;
}

.fade-in {
  opacity: 1;
  transition: opacity 2s;
}
<div id="fade1" class="fadeable">fade 1 - works</div>
<div id="fade2">fade 2 - doesn't work</div>
<div id="fade3">fade 3 - works</div>

关于javascript - 通过 JavaScript 分配时,CSS 转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210560/

相关文章:

javascript - 在进入下一步之前强制 JavaScript 完成动画

css 3d立方体在悬停旋转时有奇怪的空间

javascript - 无法正确使用json响应

javascript - 发送键不会触发按键向上或按键按下

javascript - 使用 Javascript 从 DOM 元素添加/删除类的最有效方法是什么?

html - 为什么 "font-weight: bolder"会跳过大胆的步骤?

css - 根据文本自动调整 <div> 的大小?

javascript - 将 props 传递给 React 中的子组件

PHP 倒数计时器

javascript - 当我使用过渡集更改 css 背景属性时,为什么我的背景会闪烁白色?