Javascript 代码每次点击都会运行得更多

Javascript 代码每次点击都会运行得更多,javascript,html,dom,browser,Javascript,Html,Dom,Browser,当我用鼠标点击时,我想使页面滚动。但是,当我多次单击时,该函数将再次运行。我只想运行一次。当我读到一篇关于scrollBy的文章时,我产生了这个想法 我怎样才能解决这个问题 注意:我尝试了(onmouseover)事件 保存间隔的变量m在窗口的函数范围中定义。onclick,这使得它在窗口中不可用。onmousemove。将变量定义移动到全局范围,则可从以下两个函数获得: var m; window.onclick = function () { "use strict"; m

当我用鼠标点击时,我想使页面滚动。但是,当我多次单击时,该函数将再次运行。我只想运行一次。当我读到一篇关于scrollBy的文章时,我产生了这个想法

我怎样才能解决这个问题

注意:我尝试了(onmouseover)事件


保存间隔的变量
m
窗口的函数范围中定义。onclick
,这使得它在
窗口中不可用。onmousemove
。将变量定义移动到全局范围,则可从以下两个函数获得:

var m;

window.onclick = function () {
    "use strict";
    m = setInterval(function () {
        window.scrollBy(0,1);
        console.info(m);
    },4);
};

window.onmousemove = function () {
    if (m) {
        clearInterval(m);
    }
};
编辑再次阅读您的问题后,您说您只希望此函数运行一次。在这种情况下,请添加一个检查以查看它是否已运行:

var m;
var hasRun = false;

window.onclick = function () {
    "use strict";

    if (!hasRun) {
        m = setInterval(function () {
            window.scrollBy(0,1);
            console.info(m);
        },4);

        hasRun = true;
    }
};

window.onmousemove = function () {
    if (m) {
        clearInterval(m);
    }
};

特别感谢:rickdenhaan 这是正确的代码:

var m;
var hasRun = false;

window.onclick = function () {
    "use strict";

    if (!hasRun) {
        m = setInterval(function () {
            window.scrollBy(0,1);
            console.info(m);
        },4);

        hasRun = true;
    }
};

window.onmousemove = function () {
    if (m) {
        clearInterval(m);
    }
    var hasRun = false;
};

也许对你有帮助谢谢你的帮助。但是我做了一个小的编辑,让它通过这个代码再次运行`var m;var hasRun=false;window.onclick=function(){“use strict”;if(!hasRun){m=setInterval(function(){window.scrollBy(0,1);console.info(m);},4);hasRun=true;};window.onmousemove=function(){if(m){clearInterval(m);}var hasRun=false;}`
var m;
var hasRun = false;

window.onclick = function () {
    "use strict";

    if (!hasRun) {
        m = setInterval(function () {
            window.scrollBy(0,1);
            console.info(m);
        },4);

        hasRun = true;
    }
};

window.onmousemove = function () {
    if (m) {
        clearInterval(m);
    }
    var hasRun = false;
};