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)