我有一个滑块,其值绑定到一个observable,一切都很棒。
我在滑块上设置Observable.propertyChangeEvent
,以便在更改observable时(当用户拖动滑块时)获取事件。
slider.on(Observable.propertyChangeEvent, function(data: PropertyChangeData) {
console.log('EventName: ' + data.eventName);
console.log('PropName: ' + data.propertyName);
console.log('Value: ' + data.value);
})
我希望一旦observable退出一段时间(例如:1000ms),就会执行一个事件。最重要的是,如果观察者再次开始改变,则停止此事件的方法。一旦用户在其目的地设置滑块以更新UI的其他部分,我需要进行一些处理。因此,如果用户再次开始更改它,出于性能目的,最好停止该处理,然后在用户调整滑块完成更改后执行。
我正在考虑设置一个变量然后启动一个计时器,但它现在不是点击对我来说:)
let underscore = require("underscore");
function debouncedValue(data: PropertyChangeData) {
console.log('NewSlider value: ' + data.value);
}
let debouncedSlider = underscore.debounce(debouncedValue, 800);
slider.on(Observable.propertyChangeEvent, debouncedSlider);
答案 0 :(得分:0)
在UnderscoreJS中你有一个名为debounce的功能,它完全符合你在这里想要达到的目的。
来自文档:
_.debounce(function, wait, [immediate])
创建并返回传递函数的新debounced版本,该函数将推迟它 执行直到自上次经过等待毫秒之后 它被调用的时间。用于实现仅应该执行的行为 在输入停止到达后发生。例如:渲染a 预览Markdown注释,在窗口后重新计算布局 已停止调整大小等等。