Skip to main content
Skip to footer
Follow me on LinkedIn
Follow me on Twitter
Follow me on Facebook
Follow me on Facebook
Search
The industry publication from
The Dubs
Agency
Search
Categories
Digital strategy
User experience
Content Marketing
Media buying
Search marketing
Measurement
Digital strategy
User experience
Content marketing
Media buying
Search marketing
Measurement
Home
About us
Contact
Subscribe
Research
From the publisher
Industry experts
Trending
Subscribe
News and analysis for Financial Marketers
Follow me on LinkedIn
Follow me on Twitter
Follow me on Facebook
Follow me on Facebook
Subscribe
News and analysis for Financial Marketers
Home
About us
Contact
Research
From the publisher
Industry experts
Trending
Follow me on LinkedIn
Follow me on Twitter
Follow me on Facebook
Follow me on Facebook
Subscribe
News and analysis for Financial Marketers
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); } })();