首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >立即停止setTimeout循环而不完成电流循环

立即停止setTimeout循环而不完成电流循环
EN

Stack Overflow用户
提问于 2014-11-04 19:02:07
回答 2查看 790关注 0票数 0

我正在创建一个用户操作的随机选择器。用户按下一个按钮,系统就会选择两个随机结果(这将是视频)。

该页面将交替突出两个随机结果-他们可以再次点击按钮,他们可以选择他们想要的视频。

所有这些都很好地工作,但是交替高亮显示是用一个setTimeout循环完成的,它完成了当前的循环,而不是立即停止。

我如何获得它,以便当用户按下“选择”按钮时,flit函数立即停止--而不是在当前循环结束时停止?

这是小提琴

http://jsfiddle.net/zandergrin/tmwst5z9/4/

抱歉,但这是一部程序作品-我知道这里有一些杂乱无章的地方.var区间= 0;

代码语言:javascript
复制
function random() {
    // create the array
    var posts = ["post 1", "post 2", "post 3", "post 4", "post 5", "post 6", "post 7", "post 8", "post 9", "post 10"];
    var results = posts

    // Shuffle array
    .sort(function () {
        return .5 - Math.random()
    })

    // Get first 2 items
    .slice(0, 2);
    var post1 = results[0];
    var post2 = results[1];

    // add them to the DOM
    $('#res1').html(post1);
    $('#res2').html(post2);

    // loop it
    interval = setTimeout(random, 100);

}

function start() {
    // Hide the start button
    $("#start").css("display", "none");
    $("#stop").css("display", "block");
    // Start the randomizer
    random();

}


function stop() {
    // Hide the stop button and stop the random() timeout
    clearTimeout(interval);
    $("#stop").css("display", "none");
    $("#select").css("display", "block");

    // set the inital background colour
    $("#res1").css({'background': '#123','color': '#fff'});
    $("#res2").css({'background': '#eee','color': '#000'});

    //create a function to flick between items
    function flit() {
        //color the results
        setTimeout(function () {
            $("#res1").css({'background': '#eee','color': '#000'});
            $("#res2").css({'background': '#123','color': '#fff'});
        }, 800);

        //colour again after a delay
        setTimeout(function () {
            $("#res1").css({'background': '#123','color': '#fff'});
            $("#res2").css({'background': '#eee','color': '#000'});
        }, 1600);

        //loop it
        timer = setTimeout(arguments.callee, 1600);
    };
    //run the flick function
    flit();

}


function select() {
    // stop thie flit function - doesnt stop immediately!
    clearTimeout(timer);
    $("#select").css("display","none");
    $("#refresh").css("display", "block");
}

function refresh() {
    location.reload();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-04 19:13:33

您的问题在于flit()函数--您需要为setTimeout调用分配引用,以便在它们上调用clearTimeout。现在,您正在阻止flit()select()方法中被调用,但是这两个定时器仍在排队等待将来执行。

票数 3
EN

Stack Overflow用户

发布于 2014-11-04 19:17:58

除了@sholanozie的回答之外,我建议将setTimeout放在一个数组(即arrayOfTimeouts)中,然后:

代码语言:javascript
复制
function select() {
    // stop thie flit function - doesnt stop immediately!
    arrayOfTimeouts.forEach(function(setTimer) {
        clearTimeout(setTimer);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26742958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档