diff --git a/jquery.inview.js b/jquery.inview.js index b4aa399..0f3aa3b 100644 --- a/jquery.inview.js +++ b/jquery.inview.js @@ -4,139 +4,142 @@ * - forked from http://github.com/zuk/jquery.inview/ */ (function (factory) { - if (typeof define == 'function' && define.amd) { - // AMD - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node, CommonJS - module.exports = factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } + if (typeof define == 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node, CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } }(function ($) { - var inviewObjects = [], viewportSize, viewportOffset, - d = document, w = window, documentElement = d.documentElement, timer; - - $.event.special.inview = { - add: function(data) { - inviewObjects.push({ data: data, $element: $(this), element: this }); - // Use setInterval in order to also make sure this captures elements within - // "overflow:scroll" elements or elements that appeared in the dom tree due to - // dom manipulation and reflow - // old: $(window).scroll(checkInView); - // - // By the way, iOS (iPad, iPhone, ...) seems to not execute, or at least delays - // intervals while the user scrolls. Therefore the inview event might fire a bit late there - // - // Don't waste cycles with an interval until we get at least one element that - // has bound to the inview event. - if (!timer && inviewObjects.length) { - timer = setInterval(checkInView, 250); - } - }, - - remove: function(data) { - for (var i=0; i viewportOffset.top && + elementOffset.top < viewportOffset.top + viewportSize.height && + elementOffset.left + elementSize.width > viewportOffset.left && + elementOffset.left < viewportOffset.left + viewportSize.width) { + if (!inView) { + $($element[j]).data('inview', true).trigger('inview', [true]); + } + } else if (inView) { + $($element[j]).data('inview', false).trigger('inview', [false]); + } + } + } } - var i = 0, $elements = $.map(inviewObjects, function(inviewObject) { - var selector = inviewObject.data.selector, - $element = inviewObject.$element; - return selector ? $element.find(selector) : $element; + $(w).on("scroll resize scrollstop", function() { + viewportSize = viewportOffset = null; }); - viewportSize = viewportSize || getViewportSize(); - viewportOffset = viewportOffset || getViewportOffset(); - - for (; i viewportOffset.top && - elementOffset.top < viewportOffset.top + viewportSize.height && - elementOffset.left + elementSize.width > viewportOffset.left && - elementOffset.left < viewportOffset.left + viewportSize.width) { - if (!inView) { - $element.data('inview', true).trigger('inview', [true]); - } - } else if (inView) { - $element.data('inview', false).trigger('inview', [false]); - } + // IE < 9 scrolls to focused elements without firing the "scroll" event + if (!documentElement.addEventListener && documentElement.attachEvent) { + documentElement.attachEvent("onfocusin", function() { + viewportOffset = null; + }); } - } - - $(w).on("scroll resize scrollstop", function() { - viewportSize = viewportOffset = null; - }); - - // IE < 9 scrolls to focused elements without firing the "scroll" event - if (!documentElement.addEventListener && documentElement.attachEvent) { - documentElement.attachEvent("onfocusin", function() { - viewportOffset = null; - }); - } }));