Created
October 26, 2012 09:34
-
-
Save lury/3957853 to your computer and use it in GitHub Desktop.
GA reader/scanner tracking
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jQuery(function($) { | |
// Debug flag | |
var debugMode = true; | |
// Default time delay before checking location | |
var callBackTime = 100; | |
// # px before tracking a reader | |
var readerLocation = 150; | |
// container id/class | |
var container = ".post"; | |
// reader/scanner delay | |
var reader_delay = 60; | |
// Set some flags for tracking & execution | |
var timer = 0; | |
var scroller = false; | |
var endContent = false; | |
var didComplete = false; | |
// Set some time variables to calculate reading time | |
var startTime = new Date(); | |
var beginning = startTime.getTime(); | |
var totalTime = 0; | |
// Track the aticle load | |
if (!debugMode) { | |
_gaq.push(['_trackEvent', 'Reading', 'ArticleLoaded', '', , true]); | |
} | |
// Check the location and track user | |
function trackLocation() { | |
bottom = $(window).height() + $(window).scrollTop(); | |
height = $(document).height(); | |
// If user starts to scroll send an event | |
if (bottom > readerLocation && !scroller) { | |
currentTime = new Date(); | |
scrollStart = currentTime.getTime(); | |
timeToScroll = Math.round((scrollStart - beginning) / 1000); | |
if (!debugMode) { | |
_gaq.push(['_trackEvent', 'Reading', 'StartReading', '', timeToScroll, true]); | |
} else { | |
alert('started reading ' + timeToScroll); | |
} | |
scroller = true; | |
} | |
// If user has hit the bottom of the content send an event | |
if (bottom >= $(container).scrollTop() + $(container).innerHeight() && !endContent) { | |
currentTime = new Date(); | |
contentScrollEnd = currentTime.getTime(); | |
timeToContentEnd = Math.round((contentScrollEnd - scrollStart) / 1000); | |
if (!debugMode) { | |
_gaq.push(['_trackEvent', 'Reading', 'ContentBottom', '', timeToContentEnd, true]); | |
} else { | |
alert('end content section '+timeToContentEnd); | |
} | |
endContent = true; | |
} | |
// If user has hit the bottom of page send an event | |
if (bottom >= height && !didComplete) { | |
currentTime = new Date(); | |
end = currentTime.getTime(); | |
totalTime = Math.round((end - scrollStart) / 1000); | |
if (!debugMode) { | |
if (totalTime < reader_delay) { | |
_gaq.push(['_setCustomVar', 5, 'ReaderType', 'Scanner', 2]); | |
} else { | |
_gaq.push(['_setCustomVar', 5, 'ReaderType', 'Reader', 2]); | |
} | |
_gaq.push(['_trackEvent', 'Reading', 'PageBottom', '', totalTime, true]); | |
} else { | |
alert('bottom of page '+totalTime); | |
} | |
didComplete = true; | |
} | |
} | |
// Track the scrolling and track location | |
$(window).scroll(function() { | |
if (timer) { | |
clearTimeout(timer); | |
} | |
// Use a buffer so we don't call trackLocation too often. | |
timer = setTimeout(trackLocation, callBackTime); | |
}); | |
}); | |
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment