MutationObserver 仅用于最后一次突变

Dav*_*ena 2 javascript mutation-observers

我正在使用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'] });
Run Code Online (Sandbox Code Playgroud)

然而,这个对每个像素的运行都改变了,所以运行了很多节省操作。我只想在它停止变异大约 1 秒后保存,或者每个回调都排除前一个。我已经用RxJava做过类似的事情,但没有用MutationObserver.

有任何想法吗?

小智 5

您可以通过 setTimeout 添加一个简单的 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'] });
Run Code Online (Sandbox Code Playgroud)