Javascript 清除阵列中的超时(如果存在)

Javascript 清除阵列中的超时(如果存在),javascript,arrays,settimeout,cleartimeout,Javascript,Arrays,Settimeout,Cleartimeout,就我的一生而言,我不知道如何清除数组中存在的超时 我有一个单页应用程序(SPA)网站(),每次你点击“主页”时,ID都会快速增长,这似乎不会取消超时。访问该网站,你会看到中心标志下的标语以非常快的速度变化,然后变慢。快速点击“主页”多次,查看其反应。它还没有清除,你会注意到光点 //slogans function loadSlogans(){ //slogan timeouts var sloganTimeouts = []; //slogans var s

就我的一生而言,我不知道如何清除数组中存在的超时

我有一个单页应用程序(SPA)网站(),每次你点击“主页”时,ID都会快速增长,这似乎不会取消超时。访问该网站,你会看到中心标志下的标语以非常快的速度变化,然后变慢。快速点击“主页”多次,查看其反应。它还没有清除,你会注意到光点

//slogans
function loadSlogans(){

    //slogan timeouts
    var sloganTimeouts = [];

    //slogans
    var slogans = ['Websites', 'Apps', 'Media', 'Code', 'SEO', 'CRM','Ads','Flyers','Logos','Games','Streams','Web','Websites', 'Apps', 'Media', 'Code', 'SEO', 'CRM','Ads','Flyers','Logos','Games','Streams','Web'];

    var sloganTime = 100;
    var sloganTimeFade = 0;
    var slogans_length = slogans.length;
    var sloganHalfTime = slogans_length / 2;

    //clear slogan timeouts
    $(slogans).each(function(i){

        //clear timeout if exists
        if(typeof sloganTimeouts[i] !== "undefined"){
          clearTimeout(sloganTimeouts[i]);
        }
    });

    //slogan timeout
    function runSloganTimeout(i) {

        //easing out time when half way
        if(i > sloganHalfTime){
            sloganTimeFade++;
            sloganTime = (i * 100) + (sloganTimeFade * 100) * (sloganTimeFade / 4);
        }else{
            sloganTime = i * 100;
        }

        //set timeouts
        sloganTimeouts[i] = setTimeout(function(){

            //append slogans
            $('#slogan span').html(slogans[i]);

        },sloganTime);
    }

    //each slogan
    $(slogans).each(function(i){

        //run
        runSloganTimeout(i);
    });
}

谢谢

它已清除,但上一个过程尚未结束,因此您不会清除所有即将发生的超时。 解决方案之一:添加processIdglobal var并中断上一个进程。 参见我的示例:


如果我正确地阅读了你的代码,你就不需要if子句了。他们总是一样的。为什么会有它们?不总是,它们存在于不同的环境中。你是否尝试过快速按下按钮,删除if子句,然后再试一次?我以与你相同的方式将按钮添加到站点,按下按钮时它会工作。然而,当点击主页时,它不会,这在技术上应该是一样的。
var processId = 0;

//slogans
function loadSlogans(){

    processId++;

    var selfProcessId = processId;

    //slogan timeouts
    ...
    //slogans
    ...
    //clear slogan timeouts
    ...

    //slogan timeout
    function runSloganTimeout(i) {
        //easing out time when half way
        ...
        //set timeouts
        sloganTimeouts[i] = setTimeout(function(){
            //append slogans
            if( selfProcessId == processId )
                $('#slogan span').html(i+slogans[i]);

        },sloganTime);
    }

    //each slogan
    $(slogans).each(function(i){

        //run
        if( selfProcessId == processId )
            runSloganTimeout(i);
    });
}