سؤال

I am working with Adobe Captivate to create as simple SCORM compliant package. The requirement is that I need to track only the time (total_time) that the user (the learner) is viewing a video.

I have striped the media playback on the page and inserted two buttons. One to start playing the video and another to pause it. I am now looking for a javascript function that I can call in order to start the time, (on the page load and the click of the PLAY button and stop it on the PAUSE.

Does such a command exist and is this the best way to do this?

Thanks

هل كانت مفيدة؟

المحلول

While I don't have a Captivate course to test this out on, I used some documentation about the SCORM code for captivate

I created four functions - one when the movie is started, one when paused, one when the course is about to be closed and the time needs to be calculated and one that formats the time for scorm which is a simple HH:MM:SS.S. format.

Note: that you mentioned total_time or cmi.core.total_time, this is a read only
attribute, a course should send the session time and the LMS computes the
cmi.core.total_time

References: see here or here (scroll until you see cmi.core.session_time)

Add the following code at the end of the script tag:

var mod_elapsedSeconds = 0;
var mod_startTime;

function sco_start(){
    if ( mod_startTime != 0 )
       {
          var currentDate = new Date().getTime();
           mod_elapsedSeconds += ( (currentDate - mod_startTime) / 1000 );
       }
        mod_startTime = new Date().getTime();
}

function sco_pause(){
    if ( mod_startTime != 0 )
           {
              var currentDate = new Date().getTime();
               mod_elapsedSeconds += ( (currentDate - mod_startTime) / 1000 );
           }
            mod_startTime = 0;
}
function onB4LMSFinish(){
   if ( mod_startTime != 0 )
   {
      var currentDate = new Date().getTime();
       mod_elapsedSeconds += ( (currentDate - mod_startTime) / 1000 );
      var formattedTime = convertTotalSeconds( mod_elapsedSeconds );
   }
   else
   {
      formattedTime = "00:00:00.0";
   }
   Captivate_DoFSCommand( "cmi.core.session_time", formattedTime );
} 

    function convertTotalSeconds(ts)
    {
       var sec = (ts % 60);

       ts -= sec;
       var tmp = (ts % 3600);  //# of seconds in the total # of minutes
       ts -= tmp;              //# of seconds in the total # of hours

       // convert seconds to conform to CMITimespan type (e.g. SS.00)
       sec = Math.round(sec*100)/100;

       var strSec = new String(sec);
       var strWholeSec = strSec;
       var strFractionSec = "";

       if (strSec.indexOf(".") != -1)
       {
          strWholeSec =  strSec.substring(0, strSec.indexOf("."));
          strFractionSec = strSec.substring(strSec.indexOf(".")+1, strSec.length);
       }

       if (strWholeSec.length < 2)
       {
          strWholeSec = "0" + strWholeSec;
       }
       strSec = strWholeSec;

       if (strFractionSec.length)
       {
          strSec = strSec+ "." + strFractionSec;
       }


       if ((ts % 3600) != 0 )
          var hour = 0;
       else var hour = (ts / 3600);
       if ( (tmp % 60) != 0 )
          var min = 0;
       else var min = (tmp / 60);

       if ((new String(hour)).length < 2)
          hour = "0"+hour;
       if ((new String(min)).length < 2)
          min = "0"+min;

       var rtnVal = hour+":"+min+":"+strSec;

       return rtnVal;
    }


Change the tag that looks something like this:

 <body  bgcolor="#f5f4f1" onunload="Finish();">

to:

<body  bgcolor="#f5f4f1" onunload="onB4LMSFinish();Finish();">


Add these functions to your start and pause buttons:

sco_start(); // for starting the video
sco_pause(); // for pausing


As I mentioned, I don't have the captivate course code. If you posted that somewhere, I could help you further.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top