PageSourceSearch

https://www.haifacin.co.il/js/jquery.inview.js?t=1790922520

js haifacin.co.il collected 2026-10-02 06:28:55 UTC 5,231 bytes, 136 lines download raw bytes

vendor: 5,231 bytes, lines 1-136
1/**
2 * author Christopher Blum
3 *    - based on the idea of Remy Sharp, http://remysharp.com/2009/01/26/element-in-view-event-plugin/
4 *    - forked from http://github.com/zuk/jquery.inview/
5 */
6(function ($) {
7  var inviewObjects = {}, viewportSize, viewportOffset,
8      d = document, w = window, documentElement = d.documentElement, expando = $.expando, timer;
9
10  $.event.special.inview = {
11    add: function(data) {
12      inviewObjects[data.guid + "-" + this[expando]] = { data: data, $element: $(this) };
13
14      // Use setInterval in order to also make sure this captures elements within
15      // "overflow:scroll" elements or elements that appeared in the dom tree due to
16      // dom manipulation and reflow
17      // old: $(window).scroll(checkInView);
18      //
19      // By the way, iOS (iPad, iPhone, ...) seems to not execute, or at least delays
20      // intervals while the user scrolls. Therefore the inview event might fire a bit late there
21      // 
22      // Don't waste cycles with an interval until we get at least one element that
23      // has bound to the inview event.  
24      if (!timer && !$.isEmptyObject(inviewObjects)) {
25         timer = setInterval(checkInView, 250);
26      }
27    },
28
29    remove: function(data) {
30      try { delete inviewObjects[data.guid + "-" + this[expando]]; } catch(e) {}
31
32      // Clear interval when we no longer have any elements listening
33      if ($.isEmptyObject(inviewObjects)) {
34         clearInterval(timer);
35         timer = null;
36      }
37    }
38  };
39
40  function getViewportSize() {
41    var mode, domObject, size = { height: w.innerHeight, width: w.innerWidth };
42
43    // if this is correct then return it. iPad has compat Mode, so will
44    // go into check clientHeight/clientWidth (which has the wrong value).
45    if (!size.height) {
46      mode = d.compatMode;
47      if (mode || !$.support.boxModel) { // IE, Gecko
48        domObject = mode === 'CSS1Compat' ?
49          documentElement : // Standards
50          d.body; // Quirks
51        size = {
52          height: domObject.clientHeight,
53          width:  domObject.clientWidth
54        };
55      }
56    }
57
58    return size;
59  }
60
61  function getViewportOffset() {
62    return {
63      top:  w.pageYOffset || documentElement.scrollTop   || d.body.scrollTop,
64      left: w.pageXOffset || documentElement.scrollLeft  || d.body.scrollLeft
65    };
66  }
67
68  function checkInView() {
69    var $elements = $(), elementsLength, i = 0;
70
71    $.each(inviewObjects, function(i, inviewObject) {
72      var selector  = inviewObject.data.selector,
73          $element  = inviewObject.$element;
74      $elements = $elements.add(selector ? $element.find(selector) : $element);
75    });
76
77    elementsLength = $elements.length;
78    if (elementsLength) {
79      viewportSize   = viewportSize   || getViewportSize();
80      viewportOffset = viewportOffset || getViewportOffset();
81
82      for (; i<elementsLength; i++) {
83        // Ignore elements that are not in the DOM tree
84        if (!$.contains(documentElement, $elements[i])) {
85          continue;
86        }
87
88        var $element      = $($elements[i]),
89            elementSize   = { height: $element.height(), width: $element.width() },
90            elementOffset = $element.offset(),
91            inView        = $element.data('inview'),
92            visiblePartX,
93            visiblePartY,
94            visiblePartsMerged;
95        
96        // Don't ask me why because I haven't figured out yet:
97        // viewportOffset and viewportSize are sometimes suddenly null in Firefox 5.
98        // Even though it sounds weird:
99        // It seems that the execution of this function is interferred by the onresize/onscroll event
100        // where viewportOffset and viewportSize are unset
101        if (!viewportOffset || !viewportSize) {
102          return;
103        }
104        
105        if (elementOffset.top + elementSize.height > viewportOffset.top &&
106            elementOffset.top < viewportOffset.top + viewportSize.height &&
107            elementOffset.left + elementSize.width > viewportOffset.left &&
108            elementOffset.left < viewportOffset.left + viewportSize.width) {
109          visiblePartX = (viewportOffset.left > elementOffset.left ?
110            'right' : (viewportOffset.left + viewportSize.width) < (elementOffset.left + elementSize.width) ?
111            'left' : 'both');
112          visiblePartY = (viewportOffset.top > elementOffset.top ?
113            'bottom' : (viewportOffset.top + viewportSize.height) < (elementOffset.top + elementSize.height) ?
114            'top' : 'both');
115          visiblePartsMerged = visiblePartX + "-" + visiblePartY;
116          if (!inView || inView !== visiblePartsMerged) {
117            $element.data('inview', visiblePartsMerged).trigger('inview', [true, visiblePartX, visiblePartY]);
118          }
119        } else if (inView) {
120          $element.data('inview', false).trigger('inview', [false]);
121        }
122      }
123    }
124  }
125
126  $(w).bind("scroll resize", function() {
127    viewportSize = viewportOffset = null;
128  });
129  
130  // IE < 9 scrolls to focused elements without firing the "scroll" event
131  if (!documentElement.addEventListener && documentElement.attachEvent) {
132    documentElement.attachEvent("onfocusin", function() {
133      viewportOffset = null;
134    });
135  }
136})(jQuery);

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.