code: function Frame(fun) {
      var defer;
      var tick;
      var isCancel =false;
  
      /**
       * 执行帧
       * @method request
       * @instance
       * @memberOf lib.animation~Frame
       * @return {lib.animation~Frame} 当前实例
       */
      this.request = function() {
          isCancel = false;
          var args = arguments;
  
          defer = PromiseDefer();
          PromiseMixin(defer.promise, this);
  
          tick = requestAnimationFrame(function() {
              if (isCancel) return;
              defer && defer.resolve(fun.apply(win, args));
          });
  
          return this;
      }
  
      /**
       * 取消执行
       * @method cancel
       * @instance
       * @memberOf lib.animation~Frame
       * @return {lib.animation~Frame} 当前实例
       */
      this.cancel = function() {
          if (tick) {
              isCancel = true;
              cancelAnimationFrame(tick);
              defer && defer.reject('CANCEL');
          }
  
          return this;
      }
  
      /**
       * 复制一个帧实例
       * @method clone
       * @instance
       * @memberOf lib.animation~Frame
       * @return {lib.animation~Frame} 新实例
       */
      this.clone = function() {
          return new Frame(fun);
      }
  }
docs: 构造一个帧对象
  @class lib.animation~Frame
  @param {Function} fun 当前帧执行的函数