Javascript提供了很多的延时函数,组合起来可以做出很多有意思的功能,这里主要使用3个,分别是:setInterval()、setTimeout()、clearInterval()。
首先是setInterval() 函数,setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。这是w3c组织官方的说明,也就是说,这个函数可以由开发者指定间隔时间循环的去执行一个函数或者表达式,它接受两个值,语法:window.setInterval("function",time);,这个函数非常有意思,可以使用这个函数配合AJAX做一个在线即时聊天系统。
第二是setTimeout()函数,setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。这也是w3c组织官方的说明,也就是说,这个函数可以由开发者指定一个时间去执行一个函数或者表达式,但是记住,这句话里没有“周期”两个字,所以,它是只执行一次的。语法:window.setTimeout("function", time);。
第三是clearInterval()函数,clearInterval() 方法可取消由 setInterval() 设置的 timeout,clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。这两句话都是w3c组织官方的说明。它能够取消setInterval()函数的执行,它只接受一个值,并且这个值必须得是setInterval()函数返回的。语法:clearInterval()。
下面给一小段我通过百度地图开发获取实时车辆位置功能的代码(根据实际情况,删减了一部分代码):
var intX;// 定义setInterval方法的返回值
intX = window.setInterval('getPosition()',2000);// 每隔2秒去执行一次getPosition方法
window.setTimeout('Stop()', 10000);// 10秒后执行Stop方法停止setInterval函数
// 停止setInterval函数方法
function Stop(){
window.clearInterval(intX);
}
function getPosition(){
$.ajax({
url:'userTest/getPosition',
type:'GET',
data: "id="+"${id}",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success:function(data){
var map = new BMap.Map("container");
var point = new BMap.Point(data);
map.centerAndZoom(point, 15);
map.addControl(new BMap.MapTypeControl());
map.enableScrollWheelZoom();
var markerhead = new BMap.Marker(point);
map.addOverlay(markerhead);
window.clearInterval(intX); // 定位后停止setInterval函数的执行
}
});
};