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