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