基本思路是通过JS获取客户端的时间传递给asp.net,再与asp.net获取到的服务器(或者数据库的)时间进行比较
得到2者的差值,再返回一个 [目标时间+差值] 让客户端去刷新,当用户点击的时候,服务器再进行判断是否有效,接下来就简单了
1、在JS文件里使用
document.getElementById('Button1').click();
在button1_click事件中定义所需的方法
2、在JS给服务端控件传值
document.all.txt1.value=timeString;
其中txt1为服务器控件
<script language="JavaScript" type="text/javascript">
function showtime(){
var year,month,day,hours,minutes,seconds,ap;
var intYear,intMonth,intDay,intHours,intMinutes,intSeconds;
var today;
today=new Date();
intYear=today.getYear();
intMonth=today.getMonth()+1;
intDay=today.getDate();
intHours=today.getHours();
intMinutes=today.getMinutes();
if(intHours<10)
{
intHours="0"+intHours;
}
if(intMinutes<10)
{
intMinutes="0"+intMinutes;
}
if(intSeconds<10)
{
intSeconds="0"+intSeconds;
}
intSeconds=today.getSeconds();
timeString=intYear+"-"+intMonth+"-"+intDay+" "+intHours+":"+intMinutes+":"+intSeconds;
document.all.txt1.value=timeString;
document.getElementById('Button1').click();
}
</script>
3、在服务端调用JS文件的方法
CallJavaScript(Me, "showtime()")
Public Shared Sub CallJavaScript(ByVal page As Page, ByVal FunName As String)
Dim StrScript As New StringBuilder
StrScript.Append("<script language=javascript>")
StrScript.Append(FunName)
StrScript.Append(";")
' StrScript.Append("('" & str & "');")
StrScript.Append("</script>")
If Not page.IsStartupScriptRegistered("Call" & FunName) Then
page.RegisterStartupScript("Call" & FunName, StrScript.ToString())
End If
End Sub
4、通过以上的互相传值计算客户端的时间与服务器的时间比较完成差值计算再传回去从而实现秒杀团购等无刷新的倒计时方案
这样对于服务器的负荷小,不使用其它AJAX框架
定义JS
var now = new Date();
function createtime(mubiaotime,weizhi){
var grt= new Date(mubiaotime);
now.setTime(now.getTime()+250);
days = (grt - now) / 1000 / 60 / 60 / 24;
dnum = Math.floor(days);
hours = (grt - now) / 1000 / 60 / 60 - (24 * dnum);
hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;}
minutes = (grt - now) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes);
if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (grt - now) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds);
if(String(snum).length ==1 ){snum = "0" + snum;}
if (dnum<0) {dnum=0;hnum=0;mnum=0;snum=0; }
document.getElementById(weizhi).innerHTML = dnum +"天"+ hnum + "小时"+ mnum + "分"+ snum+ "秒";
}
5、引用JS
<script language="javascript" src="djs.js"></script>
6、根据参数ID获取传递值 实现倒计时 Chr(34) 为双引号
Response.Write("<div class='Bjday' id='daojishi" & Request.QueryString("id") & "'></div>")
Response.Write("<Script language='JavaScript'>setInterval(" & Chr(34) & "createtime('" & temptime & "','daojishi" & Request.QueryString("id") & "');" & Chr(34) & ",250);</Script>")
7、通过IFRAME完成调用
<iframe src="daojishi.aspx?id=12" scrolling="no" border="0" frameborder="0" width=200 height=30></iframe>
这是我自己摸索的一条实现倒计时的方法,可能有很多不完善的地方,主要是一条思路