forked from leighmcculloch/gascrolldepth.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrolldepth.min.js
7 lines (7 loc) · 2.78 KB
/
scrolldepth.min.js
1
2
3
4
5
6
7
/*!
* @preserve
* scrolldepth.js | v0.9
* Copyright (c) 2015 Rob Flaherty (@robflaherty), Leigh McCulloch (@___leigh___), Jeremy Hicks (@ponchorage)
* Licensed under the MIT and GPL licenses.
*/
!function(e,n,t){"use strict";function r(){for(var e=1;e<arguments.length;e++)for(var n in arguments[e])arguments[e].hasOwnProperty(n)&&(arguments[0][n]=arguments[e][n]);return arguments[0]}function o(e,n){for(var t=0;t<e.length;t++)if(e[t]===n)return!0;return!1}function i(e){return"[object Array]"===Object.prototype.toString.call(e)}function u(){return Math.max(n.documentElement.scrollHeight,n.body.scrollHeight,n.documentElement.offsetHeight,n.body.offsetHeight,n.documentElement.clientHeight)}function l(){return e.innerHeight||n.documentElement.clientHeight||n.body.clientHeight}function a(){return e.pageYOffset||("CSS1Compat"===n.compatMode?n.documentElement.scrollTop:n.body.scrollTop)}function c(e){return e.getBoundingClientRect().top+a()}function f(r){return"undefined"!=typeof e.jQuery?e.jQuery(r).get(0):"undefined"!=typeof n.querySelector?n.querySelector(r):"#"==r.charAt(0)?n.getElementById(r.substr(1)):t}function s(e,n,t){e.addEventListener?e.addEventListener(n,t,!1):e.attachEvent?e.attachEvent("on"+n,t):e["on"+n]=t}function d(e,n,t){e.removeEventListener?e.removeEventListener(n,t,!1):e.detachEvent?e.detachEvent("on"+n,t):e["on"+type]=null}function m(n){E=!0,s(e,"scroll",n)}function p(n){E=!1,d(e,"scroll",n)}var g,v={minHeight:0,elements:[],percentage:!0,pixelDepth:!0},h=r({},v),y=[],E=!1,H=0,w=function(e){function n(e){return{"25%":parseInt(.25*e,10),"50%":parseInt(.5*e,10),"75%":parseInt(.75*e,10),"100%":e-5}}function t(e,n){for(var t in e)if(e.hasOwnProperty(t)){var r=e[t];!o(y,t)&&n>=r&&y.push(t)}}function i(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(!o(y,r)){var i="string"==typeof r?f(r):r;if(i){var u=c(i);n>=u&&y.push(r)}}}}function s(e,n){var t,r,o,i=null,u=0,l=function(){u=new Date,i=null,o=e.apply(t,r)};return function(){var a=new Date;u||(u=a);var c=n-(a-u);return t=this,r=arguments,0>=c?(clearTimeout(i),i=null,u=a,o=e.apply(t,r)):i||(i=setTimeout(l,c)),o}}var d=+new Date;h=r({},v,e),u()<h.minHeight||(g=s(function(){var e=u(),r=l(),o=a()+r,c=n(e),f=+new Date-d;return y.length>=4+h.elements.length?void p():(h.elements&&i(h.elements,o,f),void(h.percentage&&t(c,o,f)))},500),m(g))},b=function(){y=[],H=0,"undefined"!=typeof g&&(p(g),m(g))},O=function(e){if("undefined"!=typeof e&&i(e)){for(var n=0;n<e.length;n++){var t=e[n],r=h.elements.indexOf(t);-1==r&&h.elements.push(t)}E||m()}},j=function(e){if("undefined"!=typeof e&&i(e))for(var n=0;n<e.length;n++){var t=e[n],r=h.elements.indexOf(t);r>-1&&h.elements.splice(r,1);var o=y.indexOf(t);o>-1&&y.splice(o,1)}};e.scrolldepth={init:w,reset:b,addElements:O,removeElements:j},"undefined"!=typeof e.jQuery&&(e.jQuery.gascrolldepth=w)}(window,document);