中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      一個JavaScript的timer的代碼

      時間:2024-10-22 23:48:04 JavaScript 我要投稿
      • 相關(guān)推薦

      一個JavaScript的timer的代碼

        比起as3的Timer類,功能上略有改動

        timer2.src.js

        復制代碼 代碼如下:

        /**

        * Timer 模型

        *

        * @author rainsilence

        * @version 2.0

        */

        (function() {

        /**

        * TimerEvent constructor 構(gòu)造器

        *

        * @param type 事件類型

        * @param bubbles 是否毛票

        * @param cancelable 是否可取消

        */

        TimerEvent = function(type, bubbles, cancelable) {

        this.type = type;

        this.bubbles = bubbles;

        this.cancelable = cancelable;

        };

        /**

        * Event 時間事件聲明

        *

        * @event TIMER

        * @event TIMER_COMPLETE

        */

        extend(TimerEvent, {

        TIMER : "timer",

        TIMER_COMPLETE : "timerComplete"

        });

        /**

        * Event 方法

        *

        * @method toString

        */

        extend(TimerEvent.prototype, {

        toString : function() {

        return "[TimerEvent type=" + this.type +

        " bubbles=" + this.bubbles +

        " cancelable=" + this.cancelable +"]";

        }

        });

        /**

        * Extend 擴展類,對象的屬性或者方法

        *

        * @param target 目標對象

        * @param methods 這里改成param也許更合適,表示承載著對象,方法的對象,用于target的擴展

        */

        function extend(target, methods) {

        if (!target) {

        target = {};

        }

        for (var prop in methods) {

        target[prop] = methods[prop];

        }

        return target;

        }

        /**

        * Timer 構(gòu)造器

        *

        * @param delay 延時多少時間執(zhí)行方法句柄

        * @param repeatCount 重復多少次,如果不設(shè)置,代表重復無限次

        */

        Timer = function(delay, repeatCount) {

        var listenerMap = {};

        listenerMap[TimerEvent.TIMER] = [];

        listenerMap[TimerEvent.TIMER_COMPLETE] = [];

        extend(this, {

        currentCount : 0,

        running : false,

        delay : delay,

        repeatCount : repeatCount,

        // true:Interval,false:Timeout

        repeatType : repeatCount == null || repeatCount < 1 ? true : false,

        handler : listenerMap,

        timerId : 0,

        isCompleted : false

        });

        };

        // 事件對象初始化(這部分未實現(xiàn))

        var timerEvent = new TimerEvent(TimerEvent.TIMER, false, false);

        var timerCompleteEvent = new TimerEvent(TimerEvent.TIMER_COMPLETE, false, false);

        /**

        * Timer 計時器方法

        *

        * @method addEventListener 增加一個方法句柄(前兩個參數(shù)必須,后一個參數(shù)可選)

        * @method removeEventListener 移除一個方法句柄

        * @method start 開始計時器

        * @method stop 結(jié)束計時器

        * @method reset 重置計時器

        */

        extend(Timer.prototype, {

        addEventListener : function(type, listener, useCapture) {

        if (type == TimerEvent.TIMER || type == TimerEvent.TIMER_COMPLETE) {

        if (!listener) {

        alert("Listener is null");

        }

        if (useCapture == true) {

        this.handler[type].splice(0, 0, [listener]);

        } else {

        this.handler[type].push(listener);

        }

        }

        },

        removeEventListener : function(type, listener) {

        if (type == TimerEvent.TIMER || type == TimerEvent.TIMER_COMPLETE) {

        if (!listener) {

        this.handler[type] = [];

        } else {

        var listeners = this.handler[type];

        for (var index = 0; index < listeners.length; index++) {

        if (listeners[index] == listener) {

        listeners.splice(index, 1);

        break;

        }

        }

        }

        }

        },

        start : function() {

        var timerThis = this;

        if (this.running == true || this.isCompleted) {

        return;

        }

        if (this.handler[TimerEvent.TIMER].length == 0 &&

        this.handler[TimerEvent.TIMER_COMPLETE].length == 0) {

        alert("No Function");

        return;

        }

        if (this.repeatType) {

        this.timerId = setInterval(function() {

        dispachListener(timerThis.handler[TimerEvent.TIMER], timerEvent);

        timerThis.currentCount++;

        }, this.delay);

        } else {

        this.timerId = setTimeout(function() {delayExecute(timerThis.handler[TimerEvent.TIMER]);}, this.delay);

        }

        this.running = true;

        function delayExecute(listeners) {

        dispachListener(listeners, timerEvent);

        timerThis.currentCount++;

        if (timerThis.currentCount < timerThis.repeatCount) {

        if (timerThis.running) {

        timerThis.timerId = setTimeout(function() {delayExecute(listeners);}, timerThis.delay);

        }

        } else {

        timerThis.running = false;

        }

        if (timerThis.running == false) {

        if (!timerThis.isCompleted) {

        dispachListener(timerThis.handler[TimerEvent.TIMER_COMPLETE], timerCompleteEvent);

        }

        timerThis.isCompleted = true;

        }

        }

        function dispachListener(listeners, event) {

        for (var prop in listeners) {

        listeners[prop](event);

        }

        }

        },

        stop : function() {

        this.running = false;

        if (this.timerId == null) {

        return;

        }

        if (this.repeatType) {

        clearInterval(this.timerId);

        } else {

        clearTimeout(this.timerId);

        }

        if (!this.isCompleted) {

        var listeners = this.handler[TimerEvent.TIMER_COMPLETE];

        for (var prop in listeners) {

        listeners[prop](timerCompleteEvent);

        }

        }

        this.isCompleted = true;

        },

        reset : function() {

        this.currentCount = 0;

        this.isCompleted = false;

        }

        });

        })();

        接下來測試吧,大家見過新浪網(wǎng)上的滾動顯示嗎?用setTimeout寫的,真叫牛叉。。。。。。換成Timer重構(gòu),簡單易懂

        timerTest.html

        復制代碼 代碼如下:

        .rowLine {

        width: 400px;

        height: 80px;

        border-bottom-style: solid;

        border-width: 1px;

        }

        .barList {

        border-style: solid;

        border-width: 1px;

        width:400px;

        height: 80px;

        overflow: hidden;

        }

        1

        2

        3

        4

        addEventListener的useCapture參數(shù)本為捕獲階段觸發(fā)之意,現(xiàn)在改成如果true,則在其他句柄之前觸發(fā),如果false,則在其他句柄之后觸發(fā)。

        后記:

        現(xiàn)在貌似大家比較流行評論說明書的用法。。。比如struts+spring+hibernate。而忽略了編程的實質(zhì)。希望大家多看源碼,多討論源碼,那樣才會有所謂的思想。否則人家今天用這個framework,明天換了。你又要從頭開始了。

      【一個JavaScript的timer的代碼】相關(guān)文章:

      高效編寫JavaScript代碼的技巧08-25

      在Java中執(zhí)行JavaScript代碼07-14

      JavaScript實現(xiàn)網(wǎng)頁刷新代碼段08-07

      常用排序算法之JavaScript實現(xiàn)代碼段06-04

      網(wǎng)頁程序設(shè)計之實用JavaScript代碼段09-23

      關(guān)jQuery彈出窗口簡單實現(xiàn)代碼-javascript編程06-07

      關(guān)于TimerTask與Timer類的應用09-04

      關(guān)于ASP.NET使用JavaScript顯示信息提示窗口實現(xiàn)原理及代碼05-09

      對javascript的理解08-08

      常用的JavaScript模式09-22

      主站蜘蛛池模板: 秋霞国产av一区二区三区| 女同在线观看免费网站| 久久久久成人精品免费播放| 日本一区三区高清视频| 四子王旗| 墨玉县| 中文字幕精品一二三区 | 中文字幕日本丰满人妻| 久久久国产精品粉嫩av| 久久久国产精品ⅤA麻豆百度| 青青青国产免A在线观看| 久久精品黄色免费热线| 隆子县| 久久这里只有精品日本| 99RE6在线观看国产精品| 国产欧美日韩专区毛茸茸| 91亚洲精品久久久蜜桃| 熟女白浆精品一区二区| 综合久久青青草免费观看视频 | 国产高潮流白浆免费观看不卡| 免费人妻精品一区二区| 国产亚洲精品综合99久久| 在线免费av一区二区| 91精品国产91久久综合蜜臀| 广德县| 国产精品不卡在线视频| 长丰县| 在线观看黄片在线播放视频| 久久久久AV成人无码网站| 国产欧美久久久精品影院| 精品在免费线中文字幕久久| 龙井市| 麻豆av一区二区天堂| 武安市| 亚洲高清国产品国语在线观看| 国产激情一区二区三区成人免费| 人妖在线网国产一二三四| 国产欧美亚洲另类第一页| 夫妻一起自拍内射小视频| 免费国产h视频在线观看86| 女人被躁到高潮嗷嗷叫免费软|