使用jQuery检测计时器变量的变化

时间:2016-08-29 06:20:09

标签: javascript jquery timer

我有一些定时器每秒更新一次。我想在更改计时器变量时执行一些功能。如果有人可以帮助我。我已经提供了以下代码。

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变量的变化。

1 个答案:

答案 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