Your IP : 3.144.6.254


Current Path : /var/www/www-root/data/www/monolith-realty.ru/local/templates/monolitsochi/vendor/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/local/templates/monolitsochi/vendor/jquery.appear.js

/*
 * jQuery.appear
 * https://github.com/bas2k/jquery.appear/
 * http://code.google.com/p/jquery-appear/
 *
 * Copyright (c) 2009 Michael Hixson
 * Copyright (c) 2012 Alexander Brovikov
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 */
(function ($) {
  $.fn.appear = function (fn, options) {
    var settings = $.extend(
      {
        //arbitrary data to pass to fn
        data: undefined,

        //call fn only on the first appear?
        one: true,

        // X & Y accuracy
        accX: 0,
        accY: 0,
      },
      options
    );

    return this.each(function () {
      var t = $(this);

      //whether the element is currently visible
      t.appeared = false;

      if (!fn) {
        //trigger the custom event
        t.trigger("appear", settings.data);
        return;
      }

      var w = $(window);

      //fires the appear event when appropriate
      var check = function () {
        //is the element hidden?
        if (!t.is(":visible")) {
          //it became hidden
          t.appeared = false;
          return;
        }

        //is the element inside the visible window?
        var a = w.scrollLeft();
        var b = w.scrollTop();
        var o = t.offset();
        var x = o.left;
        var y = o.top;

        var ax = settings.accX;
        var ay = settings.accY;
        var th = t.height();
        var wh = w.height();
        var tw = t.width();
        var ww = w.width();

        if (y + th + ay >= b && y <= b + wh + ay && x + tw + ax >= a && x <= a + ww + ax) {
          //trigger the custom event
          if (!t.appeared) t.trigger("appear", settings.data);
        } else {
          //it scrolled out of view
          t.appeared = false;
        }
      };

      //create a modified fn with some additional logic
      var modifiedFn = function () {
        //mark the element as visible
        t.appeared = true;

        //is this supposed to happen only once?
        if (settings.one) {
          //remove the check
          w.unbind("scroll", check);
          var i = $.inArray(check, $.fn.appear.checks);
          if (i >= 0) $.fn.appear.checks.splice(i, 1);
        }

        //trigger the original fn
        fn.apply(this, arguments);
      };

      //bind the modified fn to the element
      if (settings.one) t.one("appear", settings.data, modifiedFn);
      else t.bind("appear", settings.data, modifiedFn);

      //check whenever the window scrolls
      w.scroll(check);

      //check whenever the dom changes
      $.fn.appear.checks.push(check);

      //check now
      check();
    });
  };

  //keep a queue of appearance checks
  $.extend($.fn.appear, {
    checks: [],
    timeout: null,

    //process the queue
    checkAll: function () {
      var length = $.fn.appear.checks.length;
      if (length > 0) while (length--) $.fn.appear.checks[length]();
    },

    //check the queue asynchronously
    run: function () {
      if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
      $.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
    },
  });

  //run checks when these methods are called
  $.each(
    [
      "append",
      "prepend",
      "after",
      "before",
      "attr",
      "removeAttr",
      "addClass",
      "removeClass",
      "toggleClass",
      "remove",
      "css",
      "show",
      "hide",
    ],
    function (i, n) {
      var old = $.fn[n];
      if (old) {
        $.fn[n] = function () {
          var r = old.apply(this, arguments);
          $.fn.appear.run();
          return r;
        };
      }
    }
  );
})(jQuery);