Javascript css转换只能在setInterval内工作?为什么?

Javascript css转换只能在setInterval内工作?为什么?,javascript,css-transitions,Javascript,Css Transitions,在脚本中的某一点上,会发生以下情况 CSS编码 .tt{ opacity: 0; transition: all 1s;} JS-CODE这不会转换 this.element.insertAdjacentHTML('beforeend',`<div class="tt">this is a message</div>`); this.tooltip = this.element.querySelector('.tt'); this.tooltip.style

在脚本中的某一点上,会发生以下情况

CSS编码

.tt{ opacity: 0; transition: all 1s;}
JS-CODE这不会转换

  this.element.insertAdjacentHTML('beforeend',`<div class="tt">this is a message</div>`);
  this.tooltip = this.element.querySelector('.tt');
  this.tooltip.style.opacity = 1; => THIS DOES NOT TRANSITION
  this.element.insertAdjacentHTML('beforeend',`<div class="tt">${this.element.dataset.tooltip}</div>`);
  this.tooltip = this.element.querySelector('.tt');
  setTimeout(function(){
    this.tooltip.style.opacity = 1 => THIS DOES TRANSITION
  }.bind(this),0);
但是,当我在这段代码中更改代码时,会发生转换

  this.element.insertAdjacentHTML('beforeend',`<div class="tt">this is a message</div>`);
  this.tooltip = this.element.querySelector('.tt');
  this.tooltip.style.opacity = 1; => THIS DOES NOT TRANSITION
  this.element.insertAdjacentHTML('beforeend',`<div class="tt">${this.element.dataset.tooltip}</div>`);
  this.tooltip = this.element.querySelector('.tt');
  setTimeout(function(){
    this.tooltip.style.opacity = 1 => THIS DOES TRANSITION
  }.bind(this),0);

为什么??即使setTimeoutdelay设置为0,也会在一个渲染状态和另一个渲染状态之间发生转换

在以不透明度0渲染元素之前,第一个代码块将更改“不透明度”属性

添加超时会引入延迟,在该延迟中,可以在不透明度为0时渲染元素

即使setTimeoutdelay设置为0


setTimeout有一个最小延迟,即使没有,作业队列也可能在下一个定时操作之前重新绘制。

你为什么大喊大叫?@JeremyThille没有大喊大叫。想用排版的方式把它弄清楚…在互联网上,大写=除了文章标题外的叫喊是setTimeout的“技巧”吗?然后是正确的解决方法吗?或者你会提出其他建议吗?@Quentin是的,这就是我删除评论的原因。