0

我在这里有一个 mootools 倒计时,但它看起来不起作用
Uncaught ReferenceError: PeriodicalExecuter is not defined在 CountDown.js 第 36 行 ( this.timer = new PeriodicalExecuter(this.update.bind(this), (this.options.frequency || 1000) / 1000);) 中收到一条错误消息

该类PeriodicalExecuter似乎不包含在 mootools 中。希望有人有代码PeriodicalExecuter或知道我在哪里可以找到它。

该类PeriodicalExecuter至少应包括功能stop()registerCallback()

这是CountDown.js的代码供您参考

/*
---
script: CountDown.js
license: MIT-style license.
description: CountDown - a mootools countdown implementation.
copyright: Copyright (c) 2008 Thierry Bela
authors: [Thierry Bela]

requires: 
  core:1.2.3: 
  - Events
  - Options
provides: [CountDown]
...
*/

var CountDown = new Class({

    /* 

        options: {

            onChange: $empty,
            onComplete: $empty,
            date: null,
            frequency: 1000 //define the update frequency (in ms), default to 1000
        },

        */
    Implements: [Options, Events],
    initialize: function (options) {

        this.setOptions(options);
        if(!this.options.date instanceof Date) this.options.date = new Date(this.options.date);

        this.timer = new PeriodicalExecuter(this.update.bind(this), (this.options.frequency || 1000) / 1000);
    },
    stop: function () {

        this.timer.stop();          
        return this
    },
    start: function () {

        this.timer.registerCallback();          
        return this
    },
    update: function () {

        var millis = Math.max(0, this.options.date.getTime() - new Date().getTime()),
        time = Math.floor(millis / 1000),
        stop = time == 0,
        countdown = {

            days: Math.floor(time / (60 * 60 * 24)), 
            time: time,
            millis: millis
        };

        time %= (60 * 60 * 24);

        countdown.hours = Math.floor(time / (60 * 60));
        time %= (60 * 60);
        countdown.minutes = Math.floor(time / 60);
        countdown.second = time % 60;

        this.fireEvent('onChange', countdown);

        if(stop) {

            this.timer.stop();
            this.fireEvent('onComplete');
        }
    }
});

编辑
我正在使用兼容的 Mootools 1.4.5 版

4

2 回答 2

1

您可以更改类代码以使用标准方法。

看起来.registerCallback只是一个启动计时器的功能,即。setInterval. 明确.stop停止计时器,即。clearInterval.
该类似乎做的唯一一件事就是每次PeriodicalExecuter将实例化时给它的参数传递给调用。setInterval

这就是足够的信息来自己实现它:)

于 2013-01-04T10:23:24.353 回答
0

https://code.google.com/p/pspygear/source/browse/trunk/trunk/PspyGear/html/osgata/scripts/PeriodicalExecuter.js?r=114
最后,我在上面的站点中找到了 js 文件

顺便说一句,谢谢@Reanimation。
源码和你说的差不多

于 2013-01-05T03:26:06.813 回答