如何确定javascript已经完成了某些操作.ios上的

How to determin that javascript has finished doing something

本文关键字:操作 ios 上的 javascript 何确定      更新时间:2023-09-26

JS相当慢。例如,在这段代码中,Js在能够添加块样式之前添加了类。这打断了我在页面上的一个动画。

comments.style.display="block";comments.className = "show";

我有一个解决办法,可以解决ios上的问题,但感觉不对:

comments.style.display="block";setTimeout(function(){comments.className = "show";},1)

是否有任何方法可以确定块样式是否已设置,然后才触发第二部分?

谢谢你的建议!

难道不能只使用if吗?

<div id="foo" style="display: none;">foo</div>
var div = document.getElementById( "foo"  );
if ( div.style.display == "none" ) {
    div.style.display = "block";
}

如果你想收听一个类更改(或风格更改)"事件",你可以尝试以下链接:

  • 使用Jquery<=更改css属性时检测事件这解决了没有jQuery的问题
  • jQuery-如果CSS类更改则引发事件
  • 在CSS更改时使用Jquery触发事件
  • 有可能听一个";风格改变";事件

我认为第一个会解决你的问题。这是代码:

document.documentElement.addEventListener( "DOMAttrModified", function( evt ){
    if ( evt.attrName === "style" ) {
        if ( evt.newValue.indexOf( "block" ) != -1 ) {
            alert( "do something!" );
        }
    }
}, false );
document.getElementById( "foo" ).style.display = "block";

这是一个可能奏效的糟糕破解:

comments.blockStyleEvent = function() {
   if ( this.style.display === "block" ) {
      this.onBlockStyleEvent.apply(this);
   }
};
comments.onBlockStyleEvent = function() {
   this.className = "show";
};
setInterval(function(){
  comments.blockStyleEvent();
}, 1);

您还可以创建两个css类,一个是show,另一个是showAsBlock,例如,然后您可以这样做:

// somewhere else
comments.className = "hide";
// ...then
comments.className = "showAsBlock";