jquery设置超时运行一次,然后由其他函数替换

jquery设置超时运行一次,然后由其他函数替换,jquery,settimeout,Jquery,Settimeout,我需要延迟功能更多的第一次,然后延迟正常的未来 var delaytime = 2000; var $this = $(this); 然后 无论如何,只运行上面的函数一次,然后替换为下面的函数?(删除5000个延迟) 我尝试了开关方法,似乎不起作用,请给我一些提示,非常感谢:)使用函数并将超时作为参数传递 var delaytime = 2000; var $this = $(this); function rundelay(delay) { setTimeout(funct

我需要延迟功能更多的第一次,然后延迟正常的未来

  var delaytime = 2000;
  var $this = $(this);
然后

无论如何,只运行上面的函数一次,然后替换为下面的函数?(删除5000个延迟)


我尝试了开关方法,似乎不起作用,请给我一些提示,非常感谢:)

使用函数并将超时作为参数传递

var delaytime = 2000;
var $this = $(this);

function rundelay(delay) {
    setTimeout(function() {
        $this.addClass('show');
        rundelay(delaytime);  
    }, delay);
}

rundelay(5000 + delaytime);

使用函数并将超时作为参数传递

var delaytime = 2000;
var $this = $(this);

function rundelay(delay) {
    setTimeout(function() {
        $this.addClass('show');
        rundelay(delaytime);  
    }, delay);
}

rundelay(5000 + delaytime);

这个代码就可以了

var timer = setTimeout(function () {
    clearTimeout(timer);
    $this.addClass('show');
    timer = setTimeout(function myfunction() {

    }, 4000);
}, 5000);

这个代码就可以了

var timer = setTimeout(function () {
    clearTimeout(timer);
    $this.addClass('show');
    timer = setTimeout(function myfunction() {

    }, 4000);
}, 5000);

在函数内设置较短的超时,get在超时内执行

然后通过延时较长的超时调用此函数:

function timeoutTrigger(){
    var out = $('#out');

    out.text(out.text() + '.');
    // Place here what should happen every iteration, like
    // $this.addClass('show');

    setTimeout(timeoutTrigger, 250); // Short delay
};

setTimeout(timeoutTrigger, 1500); // Long initial delay

请参阅此JSFIDLE:

在函数中设置较短的超时时间,该函数在超时时间内执行get

然后通过延时较长的超时调用此函数:

function timeoutTrigger(){
    var out = $('#out');

    out.text(out.text() + '.');
    // Place here what should happen every iteration, like
    // $this.addClass('show');

    setTimeout(timeoutTrigger, 250); // Short delay
};

setTimeout(timeoutTrigger, 1500); // Long initial delay
请参阅此jsFiddle:

例如,如果您希望鼠标悬停事件发生延迟,我想这就是您想要的:

$('.myelement').on('mouseover', function(){
    var $this = $(this);
    var delaytime = $this.hasClass('notfirsttime') ? 2000 : 7000;

    setTimeout(function(){
        $this.addClass('show notfirsttime');
    }, delaytime);
});
您可能还希望在鼠标移出时清除超时:

var mouseOverTimeout = null;
$('.myelement').on('mouseover', function(){
    /* code */
});
$('.myelement').on('mouseout', function(){
    $(this).removeClass('show');
    clearTimeout(mouseOverTimeout);
});

例如,如果您希望鼠标悬停事件发生延迟,我想这就是您想要的:

$('.myelement').on('mouseover', function(){
    var $this = $(this);
    var delaytime = $this.hasClass('notfirsttime') ? 2000 : 7000;

    setTimeout(function(){
        $this.addClass('show notfirsttime');
    }, delaytime);
});
您可能还希望在鼠标移出时清除超时:

var mouseOverTimeout = null;
$('.myelement').on('mouseover', function(){
    /* code */
});
$('.myelement').on('mouseout', function(){
    $(this).removeClass('show');
    clearTimeout(mouseOverTimeout);
});


你有一个循环还是应该只发生两次?这会发生很多次:)每次$this have.active类然后运行函数,但我需要更多的第一次延迟:)thanksOk所以这是在一个事件上发生的,不像下面所有的答案那样循环。你能在添加
.active
类的地方提供代码吗?为什么你知道这是由事件引起的???是的,这是一个后加载事件,代码在其他函数中有变量,我不知道如何对此函数进行演示,下次我将在这里记录所有细节,非常感谢,你下面的答案为我工作!!!谢谢:)我猜到了,因为这是一个很奇怪的想法!很高兴它有帮助。你有一个循环还是应该只发生两次?这将发生很多次:)每次$this有。活动类然后运行函数,但我需要更多的第一次延迟:)谢谢,这是在一个事件上发生的,而不是像下面所有答案那样循环。你能在添加
.active
类的地方提供代码吗?为什么你知道这是由事件引起的???是的,这是一个后加载事件,代码在其他函数中有变量,我不知道如何对此函数进行演示,下次我将在这里记录所有细节,非常感谢,你下面的答案为我工作!!!谢谢:)我猜到了,因为这是一个很奇怪的想法!很高兴它有帮助。如果(延迟=5000+delaytime)延迟=delaytimefor?由于第一次延迟被传递为5000+delaytime,它只是第一次替换它,之后它将永远不会是5000+delaytime,因此它只是一次检查。我认为您应该将这一行移到
setTimeout
中。想想看。。。会发生什么?我会编辑你的答案,你会告诉我你是否同意更改我已经编辑了我的答案,但欢迎你进一步修改,但我想现在应该可以了for?由于第一次延迟被传递为5000+delaytime,它只是第一次替换它,之后它将永远不会是5000+delaytime,因此它只是一次检查。我认为您应该将这一行移到
setTimeout
中。想想看。。。会发生什么?我会编辑你的答案,你会告诉我你是否同意更改我已经编辑了我的答案,但欢迎你进一步修改它,但我想它现在应该可以工作了。哇…我不使用鼠标器,当插件上发生“后加载”事件时运行,我将类添加到主体,你的答案对我有效,非常感谢:)哇…我不使用鼠标覆盖,这个运行在插件上的“后加载”事件时,我将类添加到主体中,您的答案对我有效,非常感谢:)非常感谢:)这对我无效,但是,是的,我看到了您的演示,工作完美!!!我的代码问题,谢谢你漂亮的回答和演示:)像伊萨克斯:)这不适合我,但是,是的,我看到你的演示,工作完美!!!我的代码问题,谢谢你的回答和演示:)喜欢吗