此函数应将页面上花费的时间写入div.它的工作正常,有一个window.onbeforeunload警告..那么为什么这不正常呢?
<script>
function tempo1() {
var d1 = new Date();
var t_day = d1.getDate();
var t_hour = d1.getHours();
var t_min = d1.getMinutes();
var t_sec = d1.getSeconds();
alert("Started at--> " + t_day + "days, " + t_hour + ":" + t_min + ":" + t_sec);
function tempo2() {
var d2 = new Date();
var t_day2 = d2.getDate();
var t_hour2 = d2.getHours();
var t_min2 = d2.getMinutes();
var t_sec2 = d2.getSeconds();
var day = t_day2 - t_day;
var hour = t_hour2 - t_hour;
var min = t_min2 - t_min;
var sec = t_sec2 - t_sec;
document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec";
}
setInterval(tempo2(), 500);
}
window.onload = tempo1();
</script>
<div id="timespent">??days, ??:??:??</div>
Run Code Online (Sandbox Code Playgroud)
作为一个工作轴,有一个很好的工作算法:
<script>
startTime = new Date();
clockStart = startTime.getTime();
function initStopwatch() {
var NewTime = new Date();
return((NewTime.getTime() - clockStart)/1000);
}
function getSecs() {
var tSecs = Math.round(initStopwatch());
var iSecs = tSecs % 60;
var iMins = Math.round((tSecs-30)/60);
var sSecs ="" + ((iSecs > 9) ? iSecs : "0" + iSecs);
var sMins ="" + ((iMins > 9) ? iMins : "0" + iMins);
document.getElementById('timespent').innerHTML = sMins+":"+sSecs;
window.setTimeout(getSecs,1000);
}
window.onload=getSecs;
</script>
<div id=timespent></div>
Run Code Online (Sandbox Code Playgroud)
在线上
window.onload = tempo1();
Run Code Online (Sandbox Code Playgroud)
...您正在调用该tempo1函数并将其返回值分配给load事件window.这是完全相同一样x = foo();,在foo被调用和存储在返回值x.
你不想要那些(),你只想要:
window.onload = tempo1;
Run Code Online (Sandbox Code Playgroud)
...分配函数引用,以便在load事件发生时调用它.
同样,正如格雷厄姆指出的那样,你以后会做同样的事情:
setInterval(tempo2(), 500);
Run Code Online (Sandbox Code Playgroud)
应该是
setInterval(tempo2, 500);
Run Code Online (Sandbox Code Playgroud)
这一行还有第二个错误:
document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec";
Run Code Online (Sandbox Code Playgroud)
在那里,你引用使用双引号(串"),但你使用单试图在替换时引号days,hour,min,和sec变量.您需要确定用于开始和结束字符串的引用.要么是好的,但你必须选择一个,所以要么全部加倍:
document.getElementById('timespent').innerHTML = "Total--> "+day+"days, "+hour+":"+min+":"+sec";
Run Code Online (Sandbox Code Playgroud)
或所有单打:
document.getElementById('timespent').innerHTML = 'Total--> '+day+'days, '+hour+':'+min+':'+sec';
Run Code Online (Sandbox Code Playgroud)
但请注意,您无需等待该load事件.如果您将脚本放在页面底部(或"timepent" 下方的任何位置div - 甚至在其下方),您可以直接调用tempo1.在load该事件window的对象发生非常在页面加载周期的后期,所有的外部资源(包括所有图片)被加载后.如果这就是你想要的,那很好,但如果没有,你有另一种选择.
参考文献: