使用setTimeout调用函数,并提供可选的停止方式
Calling function with setTimeout with optional way to stop one
我有一个函数,它运行一个回调数学计算。我使用这个函数对多个事物进行计算,方法是在前一个调用可能仍在处理时多次调用它。(我使用setTimeout来做计算)。
问题是,有时,我需要取消一个过早运行的函数。
For example
…用户在画布上单击一个对象,画布就会自动放大并移动到该对象上。但用户可以鼠标滚轮到cancel
缩放自动化,而平移仍然在进行,我希望这是有意义的,可以理解为什么我可能需要取消一个行动,而不是另一个。
var maths = new function() {
var self = this;
self.process = function(start, target, duration, callback) {
var vector = (target - start) / duration;
var startTime = Date.now();
function update() {
start += vector * (Date.now() - startTime);
startTime = Date.now();
if (start < target) {
self.timer = setTimeout(update, 0);
}
callback(start);
}
update();
}
};
maths.process(0, 10, 5000, function(value) {
console.log('Run 1:' + value);
});
maths.process(-5, -1, 5000, function(value) {
console.log('Run 2: ' + value);
});
所以我想知道,我如何能够在这里获得一种方法来取消一个特定的功能运行时,我需要,如果我需要。
我很难想出一个简单的方法来管理它,所以很容易取消任何一个电话。
我猜你想要的可以这样完成(虽然老实说,我不确定我理解你的正确:-):
var maths = new function() {
var self = this;
self.process = function(start, target, duration, callback) {
var vector = (target - start) / duration;
var startTime = Date.now();
var didCancel = false;
function update() {
if(didCancel) {
return;
}
start += vector * (Date.now() - startTime);
startTime = Date.now();
if (start < target) {
self.timer = setTimeout(update, 0);
}
callback(start);
}
update();
return {cancel: function() {didCancel = true;}};
}
};
var prc1 = maths.process(0, 10, 5000, function(value) {
console.log('Run 1:' + value);
});
var prc2 = maths.process(-5, -1, 5000, function(value) {
console.log('Run 2: ' + value);
});
setTimeout(prc1.cancel, 500);
相关文章:
- 以不同的方式调用javascript函数
- 以编程方式调用javascript函数
- 以 func(a)(b)(c) 的方式调用的 Javascript 函数
- 如何用两种不同的方式调用同一个函数
- 以编程方式调用模糊会禁用与浏览器窗口的交互
- 以编程方式调用选项卡捕获引发异常
- 防止以编程方式调用 django-rest-framework API
- 如何在回发上保留选定的选项卡或以编程方式调用之前激活方法
- jwysiwyg以编程方式调用工具栏单击
- Dropzone.js以编程方式调用accept()函数
- 如何通过JQuery或Javascript以编程方式调用服务器单击
- 如何在 d3 中以编程方式调用“单击”事件
- 如何以编程方式调用;点击“;的css
- 使用JQuery以不可见的方式调用URL并返回成功/错误标志
- javascript onclick事件在internet explorer中以编程方式调用时未冒泡<=8.
- 以全局函数的方式调用局部函数
- 可以以编程方式调用事件处理程序吗?
- 是否可以在JS中以编程方式调用电话号码?
- 如何在angularjs中以编程方式调用自定义指令
- 以编程方式调用onclick和onchange不能按预期工作