首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >css转换不是通过在同一个函数中添加类触发的。

css转换不是通过在同一个函数中添加类触发的。
EN

Stack Overflow用户
提问于 2017-07-24 00:16:14
回答 2查看 2K关注 0票数 5

当我单击窗口时,CSS转换不会触发。

代码语言:javascript
运行
AI代码解释
复制
const div = document.querySelector('div');
window.onclick = function() {
  div.classList.add('fade');
  div.classList.add('in');
}
代码语言:javascript
运行
AI代码解释
复制
.fade {
  opacity: 0;
}

.fade.in {
  transition: opacity 2s linear;
  opacity: 1;
}
代码语言:javascript
运行
AI代码解释
复制
<div>aaaa</div>

然后我修改脚本,使用setTimeout添加第二类in,它可以工作。

代码语言:javascript
运行
AI代码解释
复制
const div = document.querySelector('div');
window.onclick = function() {
  div.classList.add('fade');
  setTimeout(function() {
    div.classList.add('in');
  });
}
代码语言:javascript
运行
AI代码解释
复制
.fade {
  opacity: 0;
}

.fade.in {
  transition: opacity 2s linear;
  opacity: 1;
}
代码语言:javascript
运行
AI代码解释
复制
<div>aaaa</div>

所以我想,是不是需要一段时间之间的CSS属性变化才能触发CSS转换呢?

因此,我添加了添加类之间的时间。这也没用。

代码语言:javascript
运行
AI代码解释
复制
<script>
window.onclick = function(){
    div.classList.add('fade');
    for(var i=0;i<10000; i++){
        console.log(i);
    }
    div.classList.add('in'); 

}
</script>

为什么同一个函数中的更改类不能触发css转换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-24 01:25:25

如果我们深入研究JavaScript V8引擎的工作,就可以分解执行,从而澄清当前的行为。JavaScript是单线程的,更准确地说是

一个线程==一次调用堆栈==一件事

如上面所示,setTimeout是WebAPI的一部分,它位于浏览器中。WebAPI的优先级低于作为核心JavaScript函数的“堆栈”方法。

,如上面提到的,“这是关键的部分:对元素的classList进行多个更改不会导致每个更改都重新绘制元素”

造成这种情况的原因是“呈现队列”,它是V8体系结构的功能部分,如下所示:

呈现发生在“堆栈”方法执行之间。在所有堆栈都为空之后,将触发'event循环‘,并提取传递给WebAPI的任何方法。这就是原因,在第二个场景中,当脚本被更改为使用setTimeout时,它可以工作。

更详细的解释可以在菲利普罗伯茨博客上看到。

https://youtu.be/8aGhZQkoFbQ

票数 4
EN

Stack Overflow用户

发布于 2017-07-24 00:51:42

在第一个示例中,在重新绘制元素之前,要同时将两个类添加到元素中。不透明度的初始值为1,.fade.in的不透明度也为1,因此元素的不透明度没有变化。

这是关键的部分:对元素的classList 进行多个更改不会导致使用每个重新绘制元素。

延迟添加"in“类意味着浏览器首先必须将元素呈现为简单的.fade,其不透明度为0。超时后,浏览器意识到需要将元素的不透明度从0转换为1,因此它执行必要的插值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45275438

复制
相关文章
腾讯云云函数添加触发器
不是发了个使用腾讯云函数续费EUserv免费IPv6VPS教程嘛!感觉太麻烦了,然后就写了这篇是专门设置定时运行云函数脚本教程。
回忆大大
2021/09/08
2.1K0
多个槽函数绑定同一个信号的触发顺序
❝这是一个群友面试的题目。查了些文档描述如下。❞ Qt 3.0(包含3.0) - Qt 4.5(包含4.5)版本之前,「多个槽函数绑定同一个信号是无序调用」。 文档描述: If a signal is connected to several slots, the slots are activated in an arbitrary order when the signal is emitted. 如果信号连接到多个槽函数,则在发出信号时会以任意顺序调用槽函数。 文档出处: https://qt.de
Qt君
2023/03/17
1K0
多个槽函数绑定同一个信号的触发顺序
【译】添加图像转换类库
如果你已经有了一个图像转换的想法,希望在应用中使用,可以花上几分钟的时间,了解一下picasso-transformations这个三方类库。它是一个提供了各种Picasso转换的方法集合。对于你的实现来说,它非常值得学习。
小鄧子
2018/08/20
4500
【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )
使用 GOT 全局偏移表 拦截函数 , 只需要将 GOT 表中的 函数地址 指向 我们 自定义的 拦截函数 即可 ;
韩曙亮
2023/03/29
1.9K0
【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )
c++类的类型转换函数
之前学习的,可以将普通类型转换为类类型,需要借助转换构造函数。那么反过来,类类型可以转换为普通类型吗?
用户7886150
2021/02/04
9610
js遍历添加栏目类添加css,再点击其它删除css
很多网页设计都可能会用到js遍历去增加css类别,这篇文章主要介绍了js遍历添加栏目类添加cs, 再点击其它删除css的实例代码,非常不错,具有一定的参考借鉴借鉴价值,原作者是谁已无从知晓,但是代码是有效的,有需要的朋友可以参考下。
李洋博客
2021/06/15
3.9K0
在现有线程安全类中添加功能
Java类库中包含许多有用的“基础模块”类。通常应该优先选择重用这些类而不是开发新类:重用能降低开发工作量、开发风险以及维护成本。很多情况这些现有的类只能提供大部分工作,我们需要在不破坏线程安全的情况下添加一些新的操作。 要添加一个新的原子操作,有以下几种方法: 第一种:修改原始的类 这种方法最简单最安全。但通常情况下无法访问或修改类的源代码。 第二种:扩展类机制(通过继承) 下面的代码中BetterVector扩展了Vector,并添加了新方法putIfAbsent。但并非所有的类都像Vector那样将状
SuperHeroes
2018/05/31
7380
JAVA编程基础(六) 在Java类中添加方法
在第五节中展示的getter、setter方法我们也叫访问器方法(迅速温故:getter方法是返回指定属性值的的方法,setter方法是可以设置(修改)指定属性的方法)。封装一个类的实例对象的数据,你需要声明其属性变量为private,然后提供访问器方法。
青山师
2023/05/04
9390
触发器在渗透中的利用
0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 0x02 问题描述: a)通
逸鹏
2018/04/09
1.5K0
触发器在渗透中的利用
在不是Thread类的子类中,如何获取线程对象的名称呢?
我想要获取main方法所在的线程对象的名称,该怎么办呢?   遇到这种情况,Thread类就提供了一个很好玩的方法:     public static Thread currentThread()
黑泽君
2018/10/11
5.2K0
转换符说明使用方法(在printf函数中)
如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。
洁洁
2023/10/10
3290
梳理:python—同一个类中的方法调用
因为在自己实践综合练习学过的知识时,突然觉得有些知识点的运用总是不成功,于是翻过课本进行回顾,总是觉得是对的,可是当再进一步思考“既然是对的,为什么在程序中总是不成功呢?”,后来发现,自己理所当然的理解(忽略了细节知识),导致程序通不过,现在结合同一个类中的不同方法中的变量调用 VS 不同函数中的变量调用。
py3study
2020/01/17
2.9K0
css中好用的clamp()函数
clamp() 函数的作用是把一个值限制在一个上限和下限之间,当这个值超过最小值和最大值的范围时,在最小值和最大值之间选择一个值使用。
Daotin
2020/10/26
1.1K0
css中好用的clamp()函数
React.js 实战之 State & 生命周期将函数转换为类为一个类添加局部状态将生命周期方法添加到类中
每当Clock组件第一次加载到DOM时,我们都想生成定时器,这在React中被称为挂载
JavaEdge
2018/12/21
2.2K0
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
CSS 中的 :root 伪类介绍
bug收集:专门解决与收集bug的网站 网址:www.bugshouji.com 今天为大家介绍: css中的 :root 伪类的使用 1. :root 介绍 :root 这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说,:root 表示 <html> 元素,除了优先级更高之外,与 html 选择器相同 mdn 2. :root的应用场景 应用1:类似html 选择器, 指定样式 /* 选择文档的根元素(HTML中的 <html>) */ :root { background: ye
用户9914333
2023/02/28
1.7K0
CSS 中的 :root 伪类介绍
PHP函数uasort()在类中的使用问题解决
今天在类中使用 uasort() 函数时发现报了错误:Warning: uasort() expects parameter 2 to be a valid callback ..., 然而直接在纯
zcqshine
2018/05/11
3.9K0
同一个类中,@Async注解未生效
在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。
bug专8
2021/01/13
3.6K0
点击加载更多

相似问题

通过删除带有Javascript的类触发CSS转换

15

通过js添加类不会触发css动画

31

在通过JS添加类时应用CSS转换

24

通过使用Jquery添加类来触发CSS3转换

20

CSS转换属性在通过JS函数触发时无法工作。

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档