Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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_Mutation Observers - Fatal编程技术网

Javascript 仅针对最后一个突变的突变观察者

Javascript 仅针对最后一个突变的突变观察者,javascript,mutation-observers,Javascript,Mutation Observers,我正在使用MutationObserver保存可拖动对象中的位置更改 看起来是这样的: let observer = new MutationObserver( (mutations) => { mutations.forEach( (mutation) => { this.builderData[element.id].$position.left = element.style.left; this.builder

我正在使用
MutationObserver
保存可拖动对象中的位置更改

看起来是这样的:

 let observer = new MutationObserver( (mutations) => {
        mutations.forEach( (mutation) => {
            this.builderData[element.id].$position.left = element.style.left;
            this.builderData[element.id].$position.top = element.style.top;
            this.saveBuilderData();
        });
    });
    observer.observe(element, { attributes : true, attributeFilter : ['style'] });
然而,每个像素的运行都发生了变化,因此运行的操作节省了很多。我只想在它停止变异大约1秒后保存,或者每个回调排除前一个回调。我已经用RxJava做过类似的事情,但没有用
MutationObserver


有什么想法吗?

您可以通过设置超时添加一个简单的1秒延迟

这样,以前的回调将被丢弃,样式仅在1秒钟不活动后更改:

let timer;
let observer = new MutationObserver( (mutations) => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(() => {
    mutations.forEach( (mutation) => {
        this.builderData[element.id].$position.left = element.style.left;
        this.builderData[element.id].$position.top = element.style.top;
        this.saveBuilderData();
    });
  }, 1000);
});
observer.observe(element, { attributes : true, attributeFilter : ['style'] });

你可以用它来减少存储的信息量。我希望在这里看到更好的答案。效果很好,哥们!我尝试使用timeout,但我不知道这个clearTimeout方法=(。干杯!