1

我正在增加计时器内变量的值。它也在按钮 onClick 事件内。

setInterval(function () {
    document.getElementById('z_in').addEventListener('click', function () {
        zoom_level = 1;
    }, false);
    document.getElementById('z_out').addEventListener('click', function () {
        zoom_level = 3;
    }, false);
    document.getElementById('rotate').addEventListener('click', function () {
        angle = angle + 10;

    }, false);
    Find(db, minLon, maxLon, minLat, maxLat, zoom_level, angle, stage, layer, i);
    i++;
    //angle = 0;
    console.log();
}, 1000);

这里角度在每个循环中增加太多而不是十乘十。这个问题的原因是什么?

4

1 回答 1

2

如果仅在计时器处于活动状态时才需要侦听器,则可以使用以下内容:

var timer, i = 0, zoom_level = 1, angle = 0;
var z_in_el = document.getElementById('z_in');
var z_out_el = document.getElementById('z_out');
var rotate_el = document.getElementById('rotate');

function zoomIn(){
    zoom_level = 1;
}
function zoomOut(){
    zoom_level = 3;
}
function rotate(){
    angle += 10;
}

function startTimer(){
    addListeners();
    timer = window.setInterval(function(){
        i++;
        Find(db, minLon, maxLon, minLat, maxLat, zoom_level, angle, stage, layer, i);
        console.log(i, zoom_level, angle);
    }, 1000); 
}

function stopTimer(){
    removeListeners();
    window.clearInterval(timer);
}

function addListeners(){
    z_in_el.addEventListener("click", zoomIn, false);
    z_out_el.addEventListener("click", zoomOut, false);
    rotate_el.addEventListener("click", rotate, false);
}

function removeListeners(){
    z_in_el.removeEventListener("click", zoomIn, false);
    z_out_el.removeEventListener("click", zoomOut, false);
    rotate_el.removeEventListener("click", rotate, false);
}

用于startTimer()设置间隔或stopTimer()将其删除。

于 2013-09-19T08:51:31.073 回答