UNPKG

analytics-scroll-depth

Version:
2 lines (1 loc) 2.32 kB
var AnalyticsScrollDepth=function(){"use strict";function e(e,t){var n=this,l=0,o=null;return function(){for(var a=arguments.length,c=Array(a),r=0;r<a;r++)c[r]=arguments[r];var i=(new Date).getTime();i<l+t?(clearTimeout(o),o=setTimeout(function(){l=i,e.apply(n,c)},t)):(l=i,e.apply(n,c))}}return function(){function t(e){r.dataLayer?r.dataLayer.push(e):window[window.GoogleAnalyticsObject]&&window[window.GoogleAnalyticsObject](r.trackerName+"send","event",e.eventCategory,e.eventAction,e.eventLabel,e.eventValue,{nonInteraction:e.nonInteraction})}function n(){var e=r.scrollElement.scrollTop/(r.scrollElement.scrollHeight-r.scrollElement.clientHeight);r.percentages.forEach(function(n,l){e>=n&&(r.percentages.splice(l,1),t({event:r.eventName,eventCategory:r.eventCategory,eventAction:r.percentageDepthAction,eventLabel:n,eventValue:null,nonInteraction:r.nonInteraction}))})}function l(){for(var e=r.scrollElement.scrollTop;e>=i+r.pixelDepthInterval;)i+=r.pixelDepthInterval,t({event:r.eventName,eventCategory:r.eventCategory,eventAction:r.pixelDepthAction,eventLabel:i+r.pixelDepthInterval,eventValue:null,nonInteraction:r.nonInteraction})}function o(e){var t=e.localName;return e.id&&(t+="#"+e.id),e.className&&(t+="."+e.className.replace(/ /g,".")),t}function a(){r.elements.forEach(function(e,n){e&&e.offsetTop&&e.clientHeight&&e.offsetTop+e.clientHeight<r.scrollElement.clientHeight+r.scrollElement.scrollTop&&(r.elements.splice(n,1),t({event:r.eventName,eventCategory:r.eventCategory,eventAction:r.elementAction,eventLabel:o(e),eventValue:null,nonInteraction:r.nonInteraction}))})}function c(){r.percentages&&n(),r.pixelDepthInterval&&l(),r.elements.length&&a()}var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=0;(r=Object.assign({throttle:250,minHeight:0,scrollElement:document.documentElement,percentages:[.25,.5,.75,.9,.95,.99],pixelDepthInterval:500,elements:[],dataLayer:window.dataLayer,trackerName:"",eventName:"CustomEvent",eventCategory:"Scroll Depth",percentageDepthAction:"Percentage Depth",pixelDepthAction:"Pixel Depth",elementAction:"Element Depth",nonInteraction:!0},r)).trackerName&&(r.trackerName+="."),r.scrollElement.scrollHeight>r.scrollElement.clientHeight&&r.scrollElement.scrollHeight>r.minHeight&&function(){window.addEventListener("scroll",e(c,r.throttle),!0)}()}}();