Follow me on LinkedInFollow me on TwitterFollow me on FacebookFollow me on Facebook
Categories

Contact us

Get in touch with The Dubs Agency, the content marketing agency behind the Financial Marketer.

(function() { var divisor = 10; var audios_status = {}; function eventHandler(e) { // Ensure the audio element's status is initialized before proceeding // This is a safeguard, but the main initialization loop should ideally cover this. if (!audios_status[e.target.id]) { initializeAudioStatus(e.target); } switch (e.type) { case 'timeupdate': audios_status[e.target.id].current = Math.round(e.target.currentTime); var pct = Math.floor(100 * audios_status[e.target.id].current / e.target.duration); for (var j in audios_status[e.target.id]._progress_markers) { // Convert j to a number for proper comparison var marker = parseInt(j, 10); if (pct >= marker && marker > audios_status[e.target.id].greatest_marker) { audios_status[e.target.id].greatest_marker = marker; } } if (audios_status[e.target.id].greatest_marker && !audios_status[e.target.id]._progress_markers[audios_status[e.target.id].greatest_marker]) { audios_status[e.target.id]._progress_markers[audios_status[e.target.id].greatest_marker] = true; dataLayer.push({ 'event': 'audio', 'audioPlayerAction': 'Progress %' + audios_status[e.target.id].greatest_marker, 'audioTitle': decodeURIComponent(e.target.currentSrc.split('/').pop()) // Use .pop() for cleaner last segment }); } break; case 'play': dataLayer.push({ 'event': 'audio', 'audioPlayerAction': 'play', 'audioTitle': decodeURIComponent(e.target.currentSrc.split('/').pop()) }); break; case 'pause': dataLayer.push({ 'event': 'audio', 'audioPlayerAction': 'pause', 'audioTitle': decodeURIComponent(e.target.currentSrc.split('/').pop()), 'audioValue': audios_status[e.target.id].current }); break; case 'ended': dataLayer.push({ 'event': 'audio', 'audioPlayerAction': 'finished', 'audioTitle': decodeURIComponent(e.target.currentSrc.split('/').pop()) }); break; default: break; } } function initializeAudioStatus(audioElement) { var audioTagId; if (!audioElement.getAttribute('id')) { audioTagId = 'html5_audio_' + Math.random().toString(36).slice(2); audioElement.setAttribute('id', audioTagId); } else { audioTagId = audioElement.getAttribute('id'); } // Initialize only if not already initialized if (!audios_status[audioTagId]) { audios_status[audioTagId] = {}; audios_status[audioTagId].greatest_marker = 0; audios_status[audioTagId]._progress_markers = {}; for (var j = 0; j <= 100; j += divisor) { // Iterate up to 100, stepping by divisor audios_status[audioTagId]._progress_markers[j] = false; } audios_status[audioTagId].current = 0; } } var audios = document.getElementsByTagName('audio'); for (var i = 0; i < audios.length; i++) { initializeAudioStatus(audios[i]); // Initialize status for each audio element audios[i].addEventListener("play", eventHandler, false); audios[i].addEventListener("pause", eventHandler, false); audios[i].addEventListener("ended", eventHandler, false); audios[i].addEventListener("timeupdate", eventHandler, false); } })();