这是问题,
我有一些java code
runs
server
,60seconds
每个60seconds
选择client side
个数据,构建一个对象每一个,然后将其添加到列表中。
现在javascript
我有一些setTimeout
调用服务器上的方法并返回对象列表。这些对象每个都代表一个需要移动到屏幕上某个位置的图像。
现在我遇到了这个问题。我有 60秒来循环通过这些对象并将图像设置为正确的位置。现在,当我尝试循环时,它几乎立即循环,所有图像只出现在起始位置。这告诉我的是函数我调用动画没有时间完成,因为对该函数的另一次调用正在打断它。
如何进行控制这样,无论大小如何,我总是在 60秒内完成列表?
ps ...我试过function dataServer() {
$.getJSON("/service/data/message", function(data) {
if(data) {
msgs = data;
check = true;
counter = 0;
var total = data.length;
waitTime = (60000 / total) - (8 * delay);
for(var message in data) {
var latLng = new google.maps.LatLng(-54.75, 148);
var marker = new google.maps.Marker({
position: latLng,
map: map,
optimized: true,
icon: new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(85, 60))
});
position = [-55, 148];
result = [ data[message].x, data[message].y ];
i = 0;
deltaLat = (result[0] - position[0])/numDeltas;
deltaLng = (result[1] - position[1])/numDeltas;
var w = 85;
var h = 60;
var shrinkW = w / 2;
var shrinkH = h /2;
var shrinkDeltaW = shrinkW / numDeltas;
var shrinkDeltaH = shrinkH / numDeltas;
var deltaW = w / numDeltas;
var deltaH = h / numDeltas;
var toSet = true;
function moveMarker(result){
position[0] += deltaLat;
position[1] += deltaLng;
if(i % 4 == 0) {
w -= deltaW;
h -= deltaH;
}
var latlng = new google.maps.LatLng(position[0], position[1]);
marker.setPosition(latlng);
marker.setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(w, h)));
if(i == (numDeltas - 1)) {
var latlng = new google.maps.LatLng(data[message].x, data[message].y);
marker.setPosition(latlng);
i++;
}
if(i!=numDeltas){
i++;
if(markerArray.length > 10) {
shrinkW -= shrinkDeltaW;
shrinkH -= shrinkDeltaH;
markerArray[0].setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(shrinkW, shrinkH)));
if(i == (numDeltas -1)) {
markerArray[0].setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(85, 60)));
markerArray[0].setMap(null);
markerArray.splice(markerArray[0], 1);
feature = map.data.getFeatureById(dataArray[0].countryCode);
if (feature) {
feature.setProperty('colour', dataArray[0].opacity);
} else {
}
dataArray.splice(dataArray[0], 1);
}
}
delay = waitTime / 8;
setTimeout(moveMarker, delay);
}
}
moveMarker(result);
markerArray.push(marker);
dataArray.push(data[message]);
}
} else {
dataServer();
}
});
if(check == false) {
counter++;
if(counter == 100) {
window.location.href = "/intermission.htm";
}
}
check = false;
}
无济于事
程序客户端真的不是我强大的一面
{{1}}
答案 0 :(得分:0)
你可以像你说的那样使用setInterval(),然后在这个时间间隔到期时中断循环。 像:
var stop = false,
interval = setInterval(function(){
stop = true;
}, 60000);
var items = []; // your list.
for(var i=0, y=items.length; i<y; i++){
// Do stuff
if(stop){ break; }
}