/*** * 在线学习时间统计工具类 * @param 参数对象,包含对象( ElemtKey:元素标识 Eventtype:事件类型 mp4:wode 两种类型 openurl:打开url(缺省值)) * @param cb:回调函数 */ function countElemtDateTime(pars,cb) { var mythis, second=0, timeobj, win; var ElemtKey=pars['ElemtKey']?pars['ElemtKey']:"", Eventtype=pars['Eventtype']?pars['Eventtype']:"", openurl=pars['openurl']?pars['openurl']:""; //返回这些内部函数是为了(考虑其他业务逻辑), // 利于外部直接调用事件, // 而不需要等待页面销毁后自动调用 return { "start":function () { mythis=this; //如果下次进来或者刷新保留上次时间 second=JSON.parse(localStorage.getItem(ElemtKey))? JSON.parse(localStorage.getItem(ElemtKey)):0; localStorage.setItem(ElemtKey,second) switch(Eventtype){ case 'mp4': this.setStartTime(); break; case 'openurl': window[ElemtKey]=window.open(openurl); $(window[ElemtKey]).ready(function(){ mythis.setStartTime(); console.log('已启动监听'); }); break; } }, "setStartTime":function () { timeobj=window.setInterval(function () { second +=1000; console.log('已启动时间'+second); localStorage.setItem(ElemtKey,second); if(window[ElemtKey]['closed']){ mythis.stop(); } }, 1000); }, "stop":function () { //先停止计时 clearInterval(timeobj); if(cb){ //返回统计数据 cb({ datatimes:localStorage.getItem(ElemtKey), callback:function () { localStorage.setItem(ElemtKey,0); //清除数据 delete window[ElemtKey]; } }); } }, } } /*** * 使用案例 * @type {countElemtDateTime} */ var timecount=new countElemtDateTime({ ElemtKey:"moka"+parseInt(Math.random(1000)*10000), Eventtype:"openurl", openurl:"http://blog.csdn.net/weixin_36065510", },function (data) { if(data){ //此处处理自己的业务逻辑,比如保存数据到数据库。。。 console.log("业务处理完成后"); //调用回调函数清除本次数据 data.callback(); } } ); timecount.start();
本文对你有帮助?欢迎扫码加入前端学习社群: