在 NativeScript Slider observable 停止更改后执行事件
Execute Event after NativeScript Slider observable stops changing
我有一个滑块,其值绑定到一个可观察对象,在那里一切都很好。
我已经在滑块上设置了 Observable.propertyChangeEvent
,所以当可观察对象发生变化时(当用户拖动滑块时)我会收到事件。
slider.on(Observable.propertyChangeEvent, function(data: PropertyChangeData) {
console.log('EventName: ' + data.eventName);
console.log('PropName: ' + data.propertyName);
console.log('Value: ' + data.value);
})
我想要的:
我想在 observable 停止更改一段时间后(例如:1000 毫秒)执行一个事件。最重要的是,如果 observable 再次开始变化,有一种方法可以停止此事件。一旦用户将滑块设置在其目的地以更新 UI 的其他部分,我需要做一些处理。因此,如果用户再次开始更改它,出于性能目的,最好停止该处理,然后在用户调整滑块完成更改后执行。
我想设置一个变量,然后启动一个计时器,但现在对我来说点击不是真的:)
更新答案建议使用 Underscore.js _.debounce()
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);
在 UnderscoreJS 中,您有一个名为 debounce 的函数,它完全符合您在这里想要实现的目标。
来自文档:
_.debounce(function, wait, [immediate])
Creates and returns a new debounced version of the passed function which will postpone its
execution until after wait milliseconds have elapsed since the last
time it was invoked. Useful for implementing behavior that should only
happen after the input has stopped arriving. For example: rendering a
preview of a Markdown comment, recalculating a layout after the window
has stopped being resized, and so on.
我有一个滑块,其值绑定到一个可观察对象,在那里一切都很好。
我已经在滑块上设置了 Observable.propertyChangeEvent
,所以当可观察对象发生变化时(当用户拖动滑块时)我会收到事件。
slider.on(Observable.propertyChangeEvent, function(data: PropertyChangeData) {
console.log('EventName: ' + data.eventName);
console.log('PropName: ' + data.propertyName);
console.log('Value: ' + data.value);
})
我想要的:
我想在 observable 停止更改一段时间后(例如:1000 毫秒)执行一个事件。最重要的是,如果 observable 再次开始变化,有一种方法可以停止此事件。一旦用户将滑块设置在其目的地以更新 UI 的其他部分,我需要做一些处理。因此,如果用户再次开始更改它,出于性能目的,最好停止该处理,然后在用户调整滑块完成更改后执行。
我想设置一个变量,然后启动一个计时器,但现在对我来说点击不是真的:)
更新答案建议使用 Underscore.js _.debounce()
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);
在 UnderscoreJS 中,您有一个名为 debounce 的函数,它完全符合您在这里想要实现的目标。
来自文档:
_.debounce(function, wait, [immediate])
Creates and returns a new debounced version of the passed function which will postpone its execution until after wait milliseconds have elapsed since the last time it was invoked. Useful for implementing behavior that should only happen after the input has stopped arriving. For example: rendering a preview of a Markdown comment, recalculating a layout after the window has stopped being resized, and so on.