Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新喷漆可以测试吗?_Javascript_Html_Css - Fatal编程技术网

Javascript 重新喷漆可以测试吗?

Javascript 重新喷漆可以测试吗?,javascript,html,css,Javascript,Html,Css,目前是否有一个API可以有效地解析以下伪代码 var myElement = document.querySelector("#foo"); if (myElement[mustBeRepainted]) { // do stuff } 也就是说,“脏”元素的概念,或者下一次重新绘制时必须重新绘制的元素,或者与当前屏幕状态不同的元素 我对它的实现方式并不太挑剔,尽管我希望类似于myElement.isDirty或paintQueue(“myElement”),如果您只想捕获属性更改而

目前是否有一个API可以有效地解析以下伪代码

var myElement = document.querySelector("#foo");

if (myElement[mustBeRepainted]) {
    // do stuff
}
也就是说,“脏”元素的概念,或者下一次重新绘制时必须重新绘制的元素,或者与当前屏幕状态不同的元素


我对它的实现方式并不太挑剔,尽管我希望类似于
myElement.isDirty
paintQueue(“myElement”)
,如果您只想捕获属性更改而不是实际操作系统的绘制消息(例如),您可以简单地捕获所需的dom元素:

function trackDomChanges(I_oHTMLObject) {
    //create an observer instance
    var observer = new MutationObserver(
        function(mutations) {
            mutations.forEach(
                function(mutation) { 
                    // play with mutation.attributeName, oldValue etc.
                }
            );
        }
    );
    observer.observe(I_oHTMLObject, { attributes: true, childList: false, characterData: false });
}

trackDomChanges(myElement);

为什么您需要知道这一点?如何知道元素是否“脏”并且必须重新绘制?Plalx,项目目标是拥有一个支持以下属性的模块:var-watcher=new-watcher(),listener=new-listener();watcher.watch(myElement).attribute(“高度”)为(“420px”);观察者。告诉(听者);listener.hear(watcher,function(msg){if(msg=“myElement.height.is.420px”){myElement.addClass([some class])}}}在每一帧上测试这一点是相当繁重的,如果打火机“已经改变了”标志存在,那么这将使测试更有效。Aadit,这正是我要问的问题…有没有办法知道。例如,我们是否有一个属性或API可以测试。我不确定重新表述这个问题有什么帮助?@CrispenSmith:这两种方式都会很重。为什么需要那个模块?(提示:您可能不知道)这是一个适用于较新浏览器的非常好的解决方案,我打算实现它。但为了安全起见,我们必须测试MutationObserver对象的存在性(目前我认为它是webkit,尽管我可能错了)。我试图找到的是一个好的(或相当好的)旧浏览器的解决方案…在这种情况下,它是生态系统的一大部分。我希望浏览器可能会以一种我根本没有想到的方式公开这些信息。我开始觉得这个问题的答案是一些正式版本的“否”在这种情况下,这是一个非常好的答案。你知道吗,尽管你得到了一个
突变
,但这并不意味着物体必须被重新绘制,它意味着物体实际上已经改变并被重新绘制了。+1对于突变观察者,我以前没有听说过它,做过一些研究,这是令人敬畏的。是的,我同意。查找公开的重绘指示器(属性或函数响应)的唯一价值在于,它可能是一个更老的更稳定的指示器(如果是神秘的)告诉模块在旧浏览器中发送消息的方法。只要在语句变为true时触发响应,并且该语句可以作为对观察者的api调用,则序列在60fps时实际上并不重要。使用变异观察者,我们可以将语句传递给包装器,sae方法将使用重新绘制测试。但是,没有它不会破坏这个项目,它可能会带来一个收益。