我有一些定时器每秒更新一次。我想在更改计时器变量时执行一些功能。如果有人可以帮助我。我已经提供了以下代码。
for(var i=0; i<listingTime.length; i++){
if (listingTime[i].time >= 0) {
var second = listingTime[i].time / 1000;
var currentHour = parseInt(second / 3600);
}
}
在这里,我想检测currentHour变量的变化。
答案 0 :(得分:3)
您可以在循环之前设置前一个值变量,每当更新currentHour时,只需将它与previousValue变量匹配即可。如果它们相同,则它们不是更改,如果它们不相同,则会更改,您可以执行回调。
另一种方法是使用对象原型来更改currentHour的值。以下代码显示:
以上代码可以修改为以下添加changeListner
var HourListner = {
currentHour: null,
update: function(newValue, callback){
if(this.currentHour !== newValue){
this.currentHour = newValue;
callback(newValue);
}
}
}
timer = Object.create(HourListner);
var changeListner = function(value){
//value is the new value of currentHour
console.log(value)
}
for(var i=0; i<listingTime.length; i++){
if (listingTime[i].time >= 0) {
var second = listingTime[i].time / 1000;
var currentHour = parseInt(second / 3600);
timer.update(currentHour, changeListner)
}
}
这个技巧可以在以下代码中独立测试:
var HourListner = {
currentHour: null,
update: function(newValue, callback) {
if (this.currentHour !== newValue) {
this.currentHour = newValue;
callback(newValue);
}
}
}
timer = Object.create(HourListner);
var changeListner = function(value) {
//value is the new value of currentHour
console.log(value)
$('body').append('<p>'+value+'</p>')
}
var interval = setInterval(function(){
var t = new Date();
timer.update(t.getMinutes(), changeListner)
}, 200)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
如果以前的值发生了变化,这将执行changeListner
。