Example #1
0
 var delayed = function() {
   var remaining = wait - (now() - stamp);
   if (remaining <= 0) {
     if (maxTimeoutId) {
       clearTimeout(maxTimeoutId);
     }
     var isCalled = trailingCall;
     maxTimeoutId = timeoutId = trailingCall = undefined;
     if (isCalled) {
       lastCalled = now();
       result = func.apply(thisArg, args);
       if (!timeoutId && !maxTimeoutId) {
         args = thisArg = null;
       }
     }
   } else {
     timeoutId = setTimeout(delayed, remaining);
   }
 };
Example #2
0
 var maxDelayed = function() {
   if (timeoutId) {
     clearTimeout(timeoutId);
   }
   maxTimeoutId = timeoutId = trailingCall = undefined;
   if (trailing || (maxWait !== wait)) {
     lastCalled = now();
     result = func.apply(thisArg, args);
     if (!timeoutId && !maxTimeoutId) {
       args = thisArg = null;
     }
   }
 };
Example #3
0
  return function() {
    args = arguments;
    stamp = now();
    thisArg = this;
    trailingCall = trailing && (timeoutId || !leading);

    if (maxWait === false) {
      var leadingCall = leading && !timeoutId;
    } else {
      if (!maxTimeoutId && !leading) {
        lastCalled = stamp;
      }
      var remaining = maxWait - (stamp - lastCalled),
          isCalled = remaining <= 0;

      if (isCalled) {
        if (maxTimeoutId) {
          maxTimeoutId = clearTimeout(maxTimeoutId);
        }
        lastCalled = stamp;
        result = func.apply(thisArg, args);
      }
      else if (!maxTimeoutId) {
        maxTimeoutId = setTimeout(maxDelayed, remaining);
      }
    }
    if (isCalled && timeoutId) {
      timeoutId = clearTimeout(timeoutId);
    }
    else if (!timeoutId && wait !== maxWait) {
      timeoutId = setTimeout(delayed, wait);
    }
    if (leadingCall) {
      isCalled = true;
      result = func.apply(thisArg, args);
    }
    if (isCalled && !timeoutId && !maxTimeoutId) {
      args = thisArg = null;
    }
    return result;
  };