Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout没有被激发_Javascript_Leaflet - Fatal编程技术网

Javascript setTimeout没有被激发

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

我正在使用传单在平面图上添加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>
我正在使用传单在平面图上添加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);