美文网首页
requestanimation()兼容处理

requestanimation()兼容处理

作者: 可乐_d001 | 来源:发表于2017-11-29 16:36 被阅读0次

    window.requestNextAnimationFrame = (function () {
    var originalWebkitRequestAnimationFrame = undefined,
    wrapper = undefined,
    callback = undefined,
    geckoVersion = 0,
    userAgent = navigator.userAgent,
    index = 0,
    self = this;

    // Workaround for Chrome 10 bug where Chrome
    // does not pass the time to the animation function

    if (window.webkitRequestAnimationFrame) {
    // Define the wrapper

    wrapper = function (time) {
      if (time === undefined) {
        time = +new Date();
      }
      self.callback(time);
    };
    
    // Make the switch
    
    originalWebkitRequestAnimationFrame = window.webkitRequestAnimationFrame;
    
    window.webkitRequestAnimationFrame = function (callback, element) {
      self.callback = callback;
    
      // Browser calls the wrapper and wrapper calls the callback
    
      originalWebkitRequestAnimationFrame(wrapper, element);
    }
    

    }

    // Workaround for Gecko 2.0, which has a bug in
    // mozRequestAnimationFrame() that restricts animations
    // to 30-40 fps.

    if (window.mozRequestAnimationFrame) {
    // Check the Gecko version. Gecko is used by browsers
    // other than Firefox. Gecko 2.0 corresponds to
    // Firefox 4.0.

    index = userAgent.indexOf('rv:');
    
    if (userAgent.indexOf('Gecko') != -1) {
      geckoVersion = userAgent.substr(index + 3, 3);
    
      if (geckoVersion === '2.0') {
        // Forces the return statement to fall through
        // to the setTimeout() function.
    
        window.mozRequestAnimationFrame = undefined;
      }
    }
    

    }

    return window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    window.msRequestAnimationFrame ||

      function (callback, element) {
        var start,
            finish;
    
        window.setTimeout(function () {
          start = +new Date();
          callback(start);
          finish = +new Date();
    
          self.timeout = 1000 / 60 - (finish - start);
    
        }, self.timeout);
      };
    

    }());

    window.cancelNextRequestAnimationFrame = window.cancelRequestAnimationFrame
    || window.webkitCancelAnimationFrame
    || window.webkitCancelRequestAnimationFrame
    || window.mozCancelRequestAnimationFrame
    || window.oCancelRequestAnimationFrame
    || window.msCancelRequestAnimationFrame
    || clearTimeout;

    相关文章

      网友评论

          本文标题:requestanimation()兼容处理

          本文链接:https://www.haomeiwen.com/subject/kscpbxtx.html