UA scroll tracking script

This script will collect user reading data using Universal Analytics.

by justincutroni

HTML

<body>

<div class="entry-content">

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris tempor ipsum quis velit imperdiet sit amet vulputate diam elementum. Maecenas luctus, turpis pretium gravida tincidunt, nulla nibh feugiat nibh, posuere vestibulum odio purus condimentum mi. Vivamus nisi nulla, feugiat et tempor a, ultricies eu elit. Mauris cursus quam a purus venenatis blandit. In dolor justo, sodales eu interdum quis, dignissim placerat magna. Donec sagittis porttitor orci, et euismod ligula semper ut. Mauris auctor venenatis sapien, ut egestas ligula vulputate sit amet. In hac habitasse platea dictumst. Quisque id purus vitae diam mattis sollicitudin. Aliquam est ante, laoreet luctus tincidunt id, blandit vitae purus.
<br />
<br />

Praesent ac nunc sit amet arcu dignissim gravida. Vestibulum rutrum orci ut erat vestibulum pharetra. Vestibulum odio diam, porttitor non sagittis vitae, egestas quis ligula. Donec metus felis, tincidunt eget luctus quis, ultricies vitae arcu. Ut luctus mollis augue, vitae elementum velit dignissim id. Mauris gravida enim non eros porttitor bibendum. Integer mollis vestibulum condimentum. Duis blandit orci eu dui fringilla ac ultricies magna mollis. Aliquam convallis, felis a mollis consequat, tortor dolor convallis mauris, at blandit nisi justo at mi. Nulla ac orci diam. Donec in est magna, in sagittis turpis.
<br />
<br />

Donec a feugiat orci. Vivamus rutrum accumsan ante sit amet semper. In semper tincidunt mollis. Maecenas justo ligula, pellentesque sed imperdiet id, dapibus nec nunc. In interdum sapien ut leo euismod et scelerisque sem sagittis. Praesent sapien nunc, sodales eu consectetur volutpat, condimentum egestas magna. Morbi euismod, sapien ut feugiat placerat, mauris diam scelerisque mi, ut auctor leo tortor vitae augue. Nunc venenatis, quam in malesuada auctor, metus dui sagittis massa, sit amet convallis enim nibh eget orci. Nulla est urna, elementum a posuere pulvinar, vehicula ac arcu. Aenean ac...

JavaScript

jQuery(function($) {
    // Debug flag
    var debugMode = true;

    // Default time delay before checking location
    var callBackTime = 100;

    // # px before tracking a reader
    var readerLocation = 150;

    // 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;
    
    // Get some information about the current page
    var pageTitle = document.title;

    // Track the aticle load
    if (!debugMode) {
        ga('send', 'event', 'Reading', 'ArticleLoaded', pageTitle, {'nonInteraction': 1});
    } else {
        alert('The page has loaded. Woohoo.');    
    }

    // 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) {
                ga('send', 'event', 'Reading', 'StartReading', pageTitle, timeToScroll, {'metric1' : timeToScroll});
            } else {
                alert('started reading ' + timeToScroll);
            }
            scroller = true;
        }

        // If user has hit the bottom of the content send an event
        if (bottom >= $('.entry-content').scrollTop() + $('.entry-content').innerHeight() && !endContent) {
            currentTime = new Date();
            contentScrollEnd = currentTime.getTime();
            timeToContentEnd = Math.round((contentScrollEnd - scrollStart) / 1000);
            if (!debugMode) {
                 if (timeToContentEnd < 60) {
                    ga('set',...