点击按钮 div移动。但第二次点击按钮div的移动速度会累加。求解

阅读 5.3k
5 个回答

因为timer是局部变量吧?运行之后就销毁了

var timer = null 移到 startMove() 外面就行了

javascriptwindow.onload = function() {
    var Obtn = document.getElementById("btn1");
    Obtn.onclick = function() {
        startMove();
    };

    var timer = null;

    function startMove() {
        var oDiv = document.getElementById("div1");
        var iSpeed = 1;
        clearInterval(timer); //? 没有作用,第二次点击按钮后div还是会加速
        timer = setInterval(function() {
            if (oDiv.offsetLeft >= 300) {
                clearInterval(timer);
            } else { //这里如果不加else,每次点击按钮时即使条件已经到达,还是会每点击一下按钮,div前进一个iSpeed。因为定时函数不会马上结束,要先把下方的语句执行。
                oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';
            }
        }, 30);
    }
};
新手上路,请多包涵

你把timer放在函数内定义,每次点击按钮都会新定义一个timer。各个timer之间是独立的,互不影响。
把timer放在函数外定义,这样每次点击按钮操纵的是同一个timer。clearInterval才会生效。

setInterval 之前 clearInterval 一下。

就是局部变量的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题