setTimeout 没有被解雇
setTimeout not being fired
我正在使用 Leaflet 在平面图上添加 3 个标记。它工作正常。然后我试着让 Math.random 每 3 秒生成一次以像素为单位的坐标,删除旧标记并添加一个新标记。但我发现 setTimeout() 不起作用。我尝试了很多解决方案,都失败了。请问可以指导一下吗?
还有一个问题:control.scale 也不起作用。比例尺还在左下角,英尺栏还在。
我正在使用 Leaflet 在平面图上添加 3 个标记。它工作正常。然后我试着让 Math.random 每 3 秒生成一次以像素为单位的坐标,删除旧标记并添加一个新标记。但我发现 setTimeout() 不起作用。我尝试了很多解决方案,都失败了。请问可以指导一下吗?
还有一个问题:control.scale 也不起作用。比例尺还在左下角,英尺栏还在。
<script>
var map = L.map('map', {
crs: L.CRS.Simple,
Zoom: 0,
maxZoom:16,
minZoom: -5
});
var bounds = [[0,0], [1079,2159]]; // [y, x]
var image = L.imageOverlay('officemap.jpeg', bounds).addTo(map);
map.setView( [539,1075], 0); // ([y , x] , zoom)
map.fitBounds(bounds);
//L.control.scale('topleft', '50', 'True', 'False', 'True' ).addTo(map); // doesn't work !!!
L.control.scale().addTo(map);
var yx = L.latLng;
var xy = function(x, y) {
if (L.Util.isArray(x)) { // When doing xy([x, y]);
return yx(x[1], x[0]);
}
return yx(y, x); // When doing xy(x, y);
};
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var sol = xy(1079, 539);
//var mizar = xy(2159, 1079);
//var mizar = xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
var kruegerZ = xy(0, 0);
var maker_text="I am good!!!";
//var maker_text_array =['Name:', 'Age:', 'Group:'];
L.marker(sol).addTo(map).bindTooltip( 'Sol');
L.marker(kruegerZ).addTo(map).bindTooltip(maker_text);
//var previous_maker=null;
var current_marker=null;
/*
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
};
*/
var i="100";
var mizar = xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
current_marker=L.marker(mizar).addTo(map).bindTooltip(i);
function del_add(){
alter("in set");
map.removeLayer(current_marker);
mizar= xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
current_marker=L.marker(mizar).addTo(map).bindTooltip("I am OK");
};
//for(var j=0; j<10; j++){
setTimeout("del_add()", 100);
//};
//alert("done");
// var travel = L.polyline([sol, deneb]).addTo(map);
</script>
改变
setTimeout("del_add()", 100);
到
setTimeout(del_add, 100);
首先setTimetout有两个参数,第一个 is function(不是字符串在你的例子中)和第二个 是 时间毫秒.
如果您只是删除引号,它会立即触发该功能。这相当于:
setTimetou(det_all(), 100);
// Equivalent to:
const foo = det_all();
setTimetou(foo, 100);
如果你去掉圆括号你会得到等价于这个
setTimetou(det_all, 100);
// Equivalent to:
setTimeout(() => det_all(), 100);
这就是您所需要的!
正如我所说,setTimeout 需要函数。如果你写 foo() 你立即调用函数并结合 setTimeout(foo()) 你将函数的结果传递给 setTimetou 而不是函数本身
我正在使用 Leaflet 在平面图上添加 3 个标记。它工作正常。然后我试着让 Math.random 每 3 秒生成一次以像素为单位的坐标,删除旧标记并添加一个新标记。但我发现 setTimeout() 不起作用。我尝试了很多解决方案,都失败了。请问可以指导一下吗?
还有一个问题:control.scale 也不起作用。比例尺还在左下角,英尺栏还在。
我正在使用 Leaflet 在平面图上添加 3 个标记。它工作正常。然后我试着让 Math.random 每 3 秒生成一次以像素为单位的坐标,删除旧标记并添加一个新标记。但我发现 setTimeout() 不起作用。我尝试了很多解决方案,都失败了。请问可以指导一下吗?
还有一个问题:control.scale 也不起作用。比例尺还在左下角,英尺栏还在。
<script>
var map = L.map('map', {
crs: L.CRS.Simple,
Zoom: 0,
maxZoom:16,
minZoom: -5
});
var bounds = [[0,0], [1079,2159]]; // [y, x]
var image = L.imageOverlay('officemap.jpeg', bounds).addTo(map);
map.setView( [539,1075], 0); // ([y , x] , zoom)
map.fitBounds(bounds);
//L.control.scale('topleft', '50', 'True', 'False', 'True' ).addTo(map); // doesn't work !!!
L.control.scale().addTo(map);
var yx = L.latLng;
var xy = function(x, y) {
if (L.Util.isArray(x)) { // When doing xy([x, y]);
return yx(x[1], x[0]);
}
return yx(y, x); // When doing xy(x, y);
};
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var sol = xy(1079, 539);
//var mizar = xy(2159, 1079);
//var mizar = xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
var kruegerZ = xy(0, 0);
var maker_text="I am good!!!";
//var maker_text_array =['Name:', 'Age:', 'Group:'];
L.marker(sol).addTo(map).bindTooltip( 'Sol');
L.marker(kruegerZ).addTo(map).bindTooltip(maker_text);
//var previous_maker=null;
var current_marker=null;
/*
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
};
*/
var i="100";
var mizar = xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
current_marker=L.marker(mizar).addTo(map).bindTooltip(i);
function del_add(){
alter("in set");
map.removeLayer(current_marker);
mizar= xy(getRandomIntInclusive(0, 2159), getRandomIntInclusive(0, 1079));
current_marker=L.marker(mizar).addTo(map).bindTooltip("I am OK");
};
//for(var j=0; j<10; j++){
setTimeout("del_add()", 100);
//};
//alert("done");
// var travel = L.polyline([sol, deneb]).addTo(map);
</script>
改变
setTimeout("del_add()", 100);
到
setTimeout(del_add, 100);
首先setTimetout有两个参数,第一个 is function(不是字符串在你的例子中)和第二个 是 时间毫秒.
如果您只是删除引号,它会立即触发该功能。这相当于:
setTimetou(det_all(), 100);
// Equivalent to:
const foo = det_all();
setTimetou(foo, 100);
如果你去掉圆括号你会得到等价于这个
setTimetou(det_all, 100);
// Equivalent to:
setTimeout(() => det_all(), 100);
这就是您所需要的!
正如我所说,setTimeout 需要函数。如果你写 foo() 你立即调用函数并结合 setTimeout(foo()) 你将函数的结果传递给 setTimetou 而不是函数本身