Javascript setTimeout没有被激发
我正在使用传单在平面图上添加3个标记。它很好用。然后我尝试让Math.random每3秒生成一个像素坐标,删除旧标记并添加一个新标记。但是我发现setTimeout()不起作用。我尝试了很多解决方案,都失败了。请你给我引路好吗 还有一个问题:control.scale也不起作用。刻度仍在左下角,ft-bar仍在那里Javascript setTimeout没有被激发,javascript,leaflet,Javascript,Leaflet,我正在使用传单在平面图上添加3个标记。它很好用。然后我尝试让Math.random每3秒生成一个像素坐标,删除旧标记并添加一个新标记。但是我发现setTimeout()不起作用。我尝试了很多解决方案,都失败了。请你给我引路好吗 还有一个问题:control.scale也不起作用。刻度仍在左下角,ft-bar仍在那里 <script> var map = L.map('map', { crs: L.CRS.Simple, Zoom: 0, maxZ
<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>
我正在使用传单在平面图上添加3个标记。它很好用。然后我尝试让Math.random每3秒生成一个像素坐标,删除旧标记并添加一个新标记。但是我发现setTimeout()不起作用。我尝试了很多解决方案,都失败了。请你给我引路好吗
还有一个问题:control.scale也不起作用。刻度仍在左下角,ft-bar仍在那里
<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>
var map=L.map('map'{
crs:L.crs.Simple,
缩放:0,
maxZoom:16,
最小缩放:-5
});
变量边界=[[0,0],[10792159]];//[y,x]
var image=L.imageOverlay('officemap.jpeg',bounds.).addTo(map);
map.setView([5391075],0);//([y,x],缩放)
映射边界(bounds);
//L.控制。比例('topleft','50','True','False','True')。添加到(地图);//没用!!!
L.control.scale().addTo(映射);
var yx=L.latLng;
var xy=函数(x,y){
如果(L.Util.isArray(x)){//执行xy([x,y]);
返回yx(x[1],x[0]);
}
返回yx(y,x);//执行xy(x,y)时;
};
函数GetRandomInInclusive(最小值、最大值){
min=数学单元(min);
最大值=数学楼层(最大值);
返回Math.floor(Math.random()*(max-min+1))+min;
}
var-sol=xy(1079539);
//var mizar=xy(21591079);
//var mizar=xy(getrandomintininclusive(02159),getrandomintininclusive(01079));
var-kruegerZ=xy(0,0);
var maker_text=“我很好!!!”;
//var maker_text_array=[“名称:”、“年龄:”、“组:”];
L.marker(sol).addTo(map).bindTooltip('sol');
L.marker(kruegerZ).addTo(map).bindTooltip(maker_text);
//var-previous_-maker=null;
var current_marker=null;
/*
函数睡眠(毫秒){
const date=date.now();
让currentDate=null;
做{
currentDate=Date.now();
}while(currentDate-日期<毫秒);
};
*/
var i=“100”;
var mizar=xy(getrandomintininclusive(02159),getrandomintininclusive(01079));
当前标记=L.marker(mizar).addTo(map).bindTooltip(i);
函数del_add(){
更改(“成套”);
map.removeLayer(当前_标记);
mizar=xy(getrandominitinclusive(02159),getrandominitinclusive(01079));
current_marker=L.marker(mizar).addTo(map).bindTooltip(“我很好”);
};
//对于(var j=0;j变化
到
首先,setTimetout接受两个参数,第一个是函数(与示例中的字符串不同),第二个是以毫秒为单位的时间
如果您刚刚删除引号,它将立即触发函数。它将等效于:
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,而不是函数本身。setTimeout(del_add,100);
而不是del_add()因为它会在调用时立即触发。而且也不像您使用的字符串:)setTimeout
函数的第一个参数必须是可调用的function@marks字符串方法不首选的是valid@charlietfl刚刚在codepen登记。你说得对-我的错@标记这是一种老式方法,使用内部eval()
setTimeout
实际上可以将字符串作为第一个参数。看到和
setTimetou(det_all, 100);
// Equivalent to:
setTimeout(() => det_all(), 100);