每隔10.5秒从foreach更新一次

时间:2015-12-27 14:29:37

标签: javascript jquery google-maps-api-3

所以我有这段代码:

$.getJSON( "fetch-beacons.php", function( beacons ) {
beacons.forEach(function(beacon) {
    if (beacon.uid != "<?php echo $uid ?>"){
        var circle = new google.maps.Circle({
            strokeColor: '#add8e6',
            strokeOpacity: 0.8,
            fillColor: '#add8e6',
            fillOpacity: 0.35,
            map: map,
            center: new google.maps.LatLng(Number(beacon.lat), Number(beacon.lng)),
            radius: Number(beacon.radius)
        });
        circle.addListener('click', function() {
            post('claimcreds.php', {id: beacon.id, cid: <?php echo $uid ?>, uid: beacon.uid, lat: pos.lat, lng: pos.lng, claimattempt: "true"});
            });
            }
    else {
        var circle = new google.maps.Circle({
        strokeColor: '#ffa500',
        strokeOpacity: 0.8,
        fillColor: '#ffa500',
        fillOpacity: 0.35,
        map: map,
        center: new google.maps.LatLng(Number(beacon.lat), Number(beacon.lng)),
        radius: Number(beacon.radius)
          });
         }
      });
    });

它从JSON文档中获取有关某些圈子的详细信息,并且工作正常。问题是,我想每隔10秒检查另一个位置的圈位(让我们称之为pos),看看pos是否在圈内。

据我了解,执行此操作的方法是google.maps.geometry.spherical.computeDistanceBetween(circle.center, pos);,然后查看半径是否大于或小于此值,但我不确定我每十年如何做到这一点秒,因为圆形变量在beacons.forEach语句循环时没有保存。

有人可以帮忙吗?对不起,如果我问的问题不清楚/代码是否有点混乱呵呵:)

1 个答案:

答案 0 :(得分:1)

我想我会做这样的事情。首先定义一个全局函数,如:

function checkDistance(circle) { 
    var distance = google.maps.geometry.spherical.computeDistanceBetween(circle.getCenter(), pos);

    if (distance > x) {
        alert('ok');
    }
}

需要一个参数circle。我假设pos是一个可以访问的全局变量。

然后在你的forEach循环中,在你的if-else语句之后(假设你想将它应用于两种类型的循环),以10.5秒的间隔调用该函数。它使用您刚刚创建的circle变量作为传递给函数的参数:

setInterval(checkDistance, 10500, circle);