【问题标题】:Adding new function objects to array and then calling function method向数组中添加新的函数对象,然后调用函数方法
【发布时间】:2013-09-17 23:56:57
【问题描述】:

我不确定我是否在问题中使用了正确的术语,但我使用 playSequence() 函数和 setTimeOutFunction 中的循环触发了一系列定时函数调用。这很有效,但是我想要一个暂停功能来暂停所有计时器和一个恢复功能来恢复所有计时器。问题是,当我尝试在 pauseAllTimers() 函数中调用函数对象的暂停方法时,它会给出错误“未捕获的类型错误:对象 0 没有方法“暂停”。有任何想法吗?

var timers = new Array();

function Timer(callback, delay) {
var timerId, start, remaining = delay;

this.pause = function() {
    window.clearTimeout(timerId);
    remaining -= new Date() - start;
};

this.resume = function() {
    start = new Date();
    timerId = window.setTimeout(callback, remaining);
};

this.resume();
}

function pauseAllTimers()
{
for (var timer in timers) 
{   
    timer.pause();
}
} 

function resumeAllTimers()
{
for (var timer in timers) 
{   
    timer.resume();
}
}

function playSequence()
{
var totaltimeout = 0;
for (var lesson_step_str in lesson_step) 
{
    var splitarr = lesson_step[lesson_step_str].split("|||");
    var element = splitarr[0];
    var txt = splitarr[1];
    var timeout = splitarr[2];
    totaltimeout += (timeout*1);
    console.log(totaltimeout);
    console.log(txt);

    (function(a,b){

     var timer = new Timer(function(){ displayText( a, b); }, totaltimeout * 1000);
     timers.push(timer);
  })(element, txt);

}   
}

【问题讨论】:

    标签: javascript arrays function pointers settimeout


    【解决方案1】:

    for 循环中timer 返回的是索引而不是Timer 对象,所以你需要这样做:

    timers[timer].pause();
    

    以下是工作代码:

    var timers = new Array();
    
    var Timer = function (callback, delay) {
        this.timerId, this.start, this.remaining = delay;
    
        this.pause = function () {
            window.clearTimeout(this.timerId);
            this.remaining -= new Date() - this.start;
        };
    
        this.resume = function () {
            this.start = new Date();
            this.timerId = window.setTimeout(callback, this.remaining);
        };
    
        this.resume();
    }
    
    function pauseAllTimers() {
        for (var timer in timers) {
            timers[timer].pause();
        }
    }
    
    function resumeAllTimers() {
        for (var timer in timers) {
            timers[timer].resume();
        }
    }
    
    function playSequence() {
        var totaltimeout = 0;
        for (var i=1;i<6; i++) {    
            var txt = "this is part "+i, 
            element="#div"+i, timeout=2;
            totaltimeout += timeout;
            (function (a, b) {
                var timer = new Timer(function () {
                    $("#divTxt").html(b);
                }, totaltimeout * 1000);
                timers.push(timer);
            })(element, txt);
        }
    }
    
    $(function(){
        $("#pauseAll").click(function(){
            pauseAllTimers();
        });
    
        $("#resumeAll").click(function(){
            resumeAllTimers();
        });
    
        playSequence();
    });
    

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2010-11-10
      • 2018-09-18
      相关资源
      最近更新 更多