首页 web前端 css教程 为什么通过 JavaScript 应用 CSS 转换会失败?

为什么通过 JavaScript 应用 CSS 转换会失败?

Oct 29, 2024 am 05:57 AM

Why Do CSS Transitions Fail When Applied Through JavaScript?

修复通过 JavaScript 分配时的 CSS 过渡

尝试通过 JavaScript 应用 CSS3 过渡时,可能会遇到指定过渡失败的情况尽管应用了正确的样式,但仍要执行。这种行为可能会令人费解,特别是当直接通过浏览器的检查器应用过渡时。

根本原因

要完全理解这一问题,必须了解CSS 过渡机制。要使过渡生效,必须执行三个关键步骤:

  1. 目标元素必须显式定义过渡属性(例如,transition: opacity 2s;)。
  2. 元素必须具有过渡属性集的初始值(例如,不透明度:0;)。
  3. 必须应用过渡属性的新值(例如,不透明度:1;)。

当 JavaScript 动态分配类时(如提供的示例所示),存在潜在问题。浏览器需要时间来处理这些更改,并且动态分配目标类(例如“.target-fadein”)可能无法提供必要的延迟。

解决方案

为了解决这个问题,在分配目标类别之前需要延迟。这确保了浏览器有足够的时间来应用过渡属性并准备动画。以下代码片段说明了应用目标类时延迟的使用:

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

或者,您可以直接将目标类“.target-fadein-begin”添加到 HTML 中,以便解析它加载并准备好过渡。

其他见解

重要的是要认识到,简单地向元素添加过渡不会触发动画。实际的动画是通过更改过渡属性的值来触发的。这解释了为什么在检查器中手动设置初始和新属性值有效。

为了进一步说明,请考虑以下代码片段:

// 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)
登录后复制

在这种情况下,第一个块起作用是因为过渡的所有三个条件均已满足。该元素定义了一个过渡,初始不透明度设置为 0,新的不透明度设置为 1。第二个块失败,因为在应用过渡类之前未显式定义初始不透明度值。第三个块之所以有效,是因为延迟允许浏览器在应用转换之前处理初始值设置。

以上是为什么通过 JavaScript 应用 CSS 转换会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1421
52
Laravel 教程
1316
25
PHP教程
1266
29
C# 教程
1239
24
Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

如何使用HTML,CSS和JavaScript创建动画倒计时计时器 如何使用HTML,CSS和JavaScript创建动画倒计时计时器 Apr 11, 2025 am 11:29 AM

您是否曾经在项目上需要一个倒计时计时器?对于这样的东西,可以自然访问插件,但实际上更多

HTML数据属性指南 HTML数据属性指南 Apr 11, 2025 am 11:50 AM

您想了解的有关HTML,CSS和JavaScript中数据属性的所有信息。

使Sass更快的概念证明 使Sass更快的概念证明 Apr 16, 2025 am 10:38 AM

在一个新项目开始时,Sass汇编发生在眼睛的眨眼中。感觉很棒,尤其是当它与browsersync配对时,它重新加载

我们如何创建一个在SVG中生成格子呢模式的静态站点 我们如何创建一个在SVG中生成格子呢模式的静态站点 Apr 09, 2025 am 11:29 AM

格子呢是一块图案布,通常与苏格兰有关,尤其是他们时尚的苏格兰语。在Tar​​tanify.com上,我们收集了5,000多个格子呢

如何在WordPress主题中构建VUE组件 如何在WordPress主题中构建VUE组件 Apr 11, 2025 am 11:03 AM

内联式模板指令使我们能够将丰富的VUE组件构建为对现有WordPress标记的逐步增强。

php是A-OK用于模板 php是A-OK用于模板 Apr 11, 2025 am 11:04 AM

PHP模板通常会因促进Subpar代码而变得不良说唱,但这并不是这样的情况。让我们看一下PHP项目如何执行基本的

静态表单提供商的比较 静态表单提供商的比较 Apr 16, 2025 am 11:20 AM

让我们尝试在这里造成一个术语:“静态表单提供商”。你带上html

See all articles