2011-06-29 112 views
1

我有一个脚本来加载时间和日期等。我有结果加载到一个div,该div有一个输入CSS3动画。唯一的问题是,实际加载时间和日期需要几秒钟,并且突然出现。由于在加载页面时没有立即看到它,所以甚至不会看到动画,因为在脚本加载完成时它已结束。预加载javascript

所以我的问题是:是否有可能延迟页面加载,直到时间和日期脚本加载后?

声明:这是一个纯粹的实验/创意项目,我正在研究,所以我并不担心效率。

脚本:

<script> 
    var dayarray=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday") 

    var montharray=new Array("January","February","March","April","May","June","July","August","September","October","November","December") 

    function getthedate(){ 
    var mydate=new Date() 
    var year=mydate.getYear() 
    if (year < 1000) 
    year+=1900 
    var day=mydate.getDay() 
    var month=mydate.getMonth() 
    var daym=mydate.getDate() 
    if (daym<10) 
    daym="0"+daym 
    var hours=mydate.getHours() 
    var minutes=mydate.getMinutes() 
    var seconds=mydate.getSeconds() 
    var dn="AM" 
    if (hours>=12) 
    dn="PM" 
    if (hours>12){ 
    hours=hours-12 
    } 
    if (hours==0) 
    hours=12 
    if (minutes<=9) 
    minutes="0"+minutes 
    if (seconds<=9) 
    seconds="0"+seconds 
    //change font size here 
    var cdate="<div class='ref'><span>"+hours+":"+minutes+"</span> "+dn+"</div>"+dayarray[day]+", "+montharray[month]+" "+daym+", "+year+"" 
    if (document.all) 
    document.all.clock.innerHTML=cdate 
    else if (document.getElementById) 
    document.getElementById("time-date").innerHTML=cdate 
    else 
    document.write(cdate) 
    } 
    if (!document.all&&!document.getElementById) 
    getthedate() 
    function goforit(){ 
    if (document.all||document.getElementById) 
    setInterval("getthedate()",1000) 
    } 
</script> 

HTML:

<body onLoad="goforit()"> 
    <div id="time-date"></div> 
</body> 

回答

1

你的代码中显式等待一个第二加载数据之前。您应该将到getthedate()立即呼叫setInterval()语句之前:

if (document.all||document.getElementById) 
    getthedate() 
    setInterval("getthedate()",1000) 
    } 

这可以避免需要阻止页面加载。如果这还不够,您会希望将代码放在内联中,而不是通过onload来调用它,该代码仅在整个页面加载后才运行。

+0

很好的捕获。我没有看到。 –

+0

我也没有。谢谢,效果很好! – Grefcs

0

您正在调用body onload事件中的脚本,因此根据定义,它将等待页面完全加载。

如果您希望脚本运行得更早,您可以在HTML中放置一个脚本标记,在解析您希望的位置调用goforit()函数,但结果可能并不会更好。

<div id="time-date"></div> 
<script type='text/javascript'> 
    goforit(); 
</script> 
0

将此脚本放在您的div下面。在执行脚本之前,您的div必须加载。

<script type='text/javascript'> 
goforit(); 
</script>