Spaces:
Running
Running
/* --------------------------------------------------*/ | |
/* ------------- MEDIA PLAYBACK ----------------- */ | |
/* ---------------------https://web.archive.org/web/20220121094229/ */ | |
/* https://childes.talkbank.org/browser/index.php?url=Eng-UK/MPI-EVA-Manchester/Eleanor/020006b.cha */ | |
/*-----------------------------*/ | |
$(function (){ | |
// Add "timeupdate" listener to "#speakera". | |
var vid = document.getElementById("speakera"); | |
vid.addEventListener("timeupdate", function(){ | |
updatePosition(this.currentTime); | |
}); | |
// Listen for user to pause video. | |
vid.addEventListener("pause", function(){ | |
$( '.movControl' ).html("▶"); // Change all bullets to "play". | |
}); | |
// Listen for user to play video. ** i added this | |
vid.addEventListener("play", function(){ | |
$( '.movControl' ).html("■"); // Change all bullets to "stop". | |
}); | |
// Click on utterance line. | |
$("body").on('click', 'span[name=utterance]', | |
function(event) { | |
var vid = document.getElementById("speakera"); | |
// If user clicked "stop" on a playing line, pause video, remove ".playing", change icon to "play". | |
if(!vid.paused) { | |
vid.pause(); | |
} | |
else { | |
var newTime = $(this).attr("beg"); | |
vid.currentTime = newTime / 1000; | |
// currentTime needs to be in SEC | |
vid.play(); | |
var segmentDur = $(this).attr("end") - newTime | |
// segmentDur needs to be in MS | |
setTimeout(function(){ | |
document.getElementById('speakera').pause(); | |
}, segmentDur); | |
} | |
} | |
); | |
getIntervals(); | |
}); | |
// Create "intervals[]" from each <span name="utterance"> using its beg/end to get the begin/end times. | |
var intervals = []; | |
function getIntervals() { | |
$( 'span[name=utterance]' ).each(function( index ) { | |
intervals.push({"begin": $( this ).prop('beg'), "end": $( this ).prop('end')}); | |
}); | |
} | |
// Set $ref as not playing. | |
function notPlaying($ref) { | |
$ref.removeClass('uttPlaying'); | |
$ref.children(".movControl").html("▶"); // Show "play" icon. | |
$ref.children(".movControl").removeClass("playing"); | |
} | |
// Set $ref as playing. | |
function isPlaying($ref) { | |
$ref.addClass('uttPlaying'); | |
$ref.children(".movControl").html("■"); // Show "stop" icon. | |
$ref.children(".movControl").addClass("playing"); | |
} | |
// Returns true if $elem is beyond the current scrolled view. | |
function isScrolledOutOfView($elem) { | |
var $window = $(window); | |
var windowTop = $window.scrollTop(); | |
var windowBottom = windowTop + $window.height(); | |
var elemTop = $elem.offset().top; | |
var elemBottom = elemTop + $elem.height(); | |
return ((elemBottom > windowBottom) || (elemTop < windowTop)); | |
} | |
// Callback function for timeupdate event. | |
function updatePosition( currentTime ) { | |
var msTime = currentTime * 1000; | |
for ( c = 0; c < intervals.length; c++ ) { | |
if ((msTime >= intervals[c].begin) && (msTime < intervals[c].end)) { | |
notPlaying($( 'span[name=utterance]' )); // Mark everything as "not playing". | |
isPlaying($( '#' + intervals[c].begin )); // Mark line corresponding to currentTime as "playing". | |
// Auto-scroll if playing line is out of view. | |
if (isScrolledOutOfView($('.playing'))) { | |
$('html, body').animate({ | |
scrollTop: ($(".playing").offset().top - ($(window).height() / 2)) | |
}, 500); | |
} | |
} | |
//$( 'span[name=utterance]' ).removeClass('uttPlaying'); // No interval defined at currentTime. | |
} | |
} | |