• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 一個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,明天換了。你又要從頭開始了。

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【一個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

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 最新久久久久久一本 | 婷婷丁香五月激情亚洲 | 日本一本之道高清不卡免 | 午夜歐美福利視頻 | 亚洲中文制服丝袜欧美精品 | 一本一道a√无碼中文字幕 亚洲无毒AV在线 |

            一個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,明天換了。你又要從頭開始了。