【问题标题】:Stop the function after 3 seconds, after every time I call it3 秒后停止该功能,每次我调用它之后
【发布时间】:2022-11-22 02:59:29
【问题描述】:

每次我在搜索框中搜索新区域时,我都试图在 3 秒后停止 drawPolygon 函数,即我希望这个方块隐藏:

let map;
var showPolygon = true;

(function() {
    map = L.map('map').setView([51.505, -0.09], 13);
    map.addGoogleMutant();
  
    map.whenReady(function() {
        img = L.distortableImageOverlay('example.jpg', {
            selected: true,
            fullResolutionSrc: 'large.jpg',
        }).addTo(map);
    });
})();

var geocoder = L.Control.geocoder({
    defaultMarkGeocode: true
})
.on('markgeocode', drawPolygon)
.addTo(map);

setTimeout(function() 
{ 
    drawPolygon;
    console.log('yay')
    showPolygon = false;
}, 20000);

function drawPolygon(e){
    showPolygon = true;
    if(showPolygon) {
        var bbox = e.geocode.bbox;
        var poly = L.polygon([
            bbox.getSouthEast(),
            bbox.getNorthEast(),
            bbox.getNorthWest(),
            bbox.getSouthWest()
        ]).addTo(map);
        map.fitBounds(poly.getBounds());
    }
}



// function JSalert(){
//     if (showalert) {
//         alert("Please don't click too soon");
//     }
// }

我使用了 setTimeout 函数,但我必须在 5 秒之前搜索一些东西,否则我看不到多边形

【问题讨论】:

  • 那么在执行代码之前是否需要 3 秒计时器?
  • 例如,当我搜索伦敦时。我看到伦敦周围有一个广场。我希望方块在 3 秒后消失
  • 所以你需要一段代码来绘制一个正方形,之后你启动一个 3 秒的计时器,并且在计时器结束后它应该触发一个函数来移除方框。
  • 是的,我可以画正方形,请看截图
  • 目前还不是很清楚具体卡在什么地方,您是无法暂停代码执行,还是无法移除正方形,或者两者兼而有之?

标签: javascript


【解决方案1】:

您当前正试图通过设置 showPolygon = false 来隐藏您的框,这将不起作用,因为更改变量不会触发元素的重新呈现。

我从来没有玩过地图,但我的假设是应该有一个功能可以让您删除多边形,请尝试查看文档。

如果没有,您可以尝试从屏幕上删除包含所有数据的地图,然后重新添加,但您应该将此作为最后的手段。

【讨论】: