PageSourceSearch

https://www.eumed.net/assets/custom/js/jquery.appear.js

js eumed.net collected 2026-10-01 11:25:39 UTC 2,894 bytes, 123 lines download raw bytes

1/*
2 * jQuery appear plugin
3 *
4 * Copyright (c) 2012 Andrey Sidorov
5 * licensed under MIT license.
6 *
7 * https://github.com/morr/jquery.appear/
8 *
9 * Version: 0.4
10 */
11(function($) {
12  var selectors = [];
13
14  var check_binded = false;
15  var check_lock = false;
16  var defaults = {
17    interval: 250,
18    force_process: false
19  };
20  var $window = $(window);
21
22  var $prior_appeared = [];
23
24  function appeared(selector) {
25    return $(selector).filter(function() {
26      return $(this).is(':appeared');
27    });
28  }
29
30  function process() {
31    check_lock = false;
32    for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) {
33      var $appeared = appeared(selectors[index]);
34
35      $appeared.trigger('appear', [$appeared]);
36
37      if ($prior_appeared[index]) {
38        var $disappeared = $prior_appeared[index].not($appeared);
39        $disappeared.trigger('disappear', [$disappeared]);
40      }
41      $prior_appeared[index] = $appeared;
42    }
43  }
44
45  function add_selector(selector) {
46    selectors.push(selector);
47    $prior_appeared.push();
48  }
49
50  // ":appeared" custom filter
51  $.expr.pseudos.appeared = $.expr.createPseudo(function(arg) {
52    return function(element) {
53      var $element = $(element);
54      if (!$element.is(':visible')) {
55        return false;
56      }
57
58      var window_left = $window.scrollLeft();
59      var window_top = $window.scrollTop();
60      var offset = $element.offset();
61      var left = offset.left;
62      var top = offset.top;
63
64      if (top + $element.height() >= window_top &&
65          top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() &&
66          left + $element.width() >= window_left &&
67          left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) {
68        return true;
69      } else {
70        return false;
71      }
72    };
73  });
74
75  $.fn.extend({
76    // watching for element's appearance in browser viewport
77    appear: function(selector, options) {
78      $.appear(this, options);
79      return this;
80    }
81  });
82
83  $.extend({
84    appear: function(selector, options) {
85      var opts = $.extend({}, defaults, options || {});
86
87      if (!check_binded) {
88        var on_check = function() {
89          if (check_lock) {
90            return;
91          }
92          check_lock = true;
93
94          setTimeout(process, opts.interval);
95        };
96
97        $(window).scroll(on_check).resize(on_check);
98        check_binded = true;
99      }
100
101      if (opts.force_process) {
102        setTimeout(process, opts.interval);
103      }
104
105      add_selector(selector);
106    },
107    // force elements's appearance check
108    force_appear: function() {
109      if (check_binded) {
110        process();
111        return true;
112      }
113      return false;
114    }
115  });
116})(function() {
117  if (typeof module !== 'undefined') {
118    // Node
119    return require('jquery');
120  } else {
121    return jQuery;
122  }
123}());

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.