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

jquery set timeout run once then replace by other function

我第一次需要延迟更多功能,以后再延迟正常

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

然后

  setTimeout(function() {
    $this.addClass('show');
  }, 5000 + delaytime);

总之 运行 上面的函数只有一次,然后用下面的函数替换? (删除 5000 延迟)

  setTimeout(function() {
    $this.addClass('show');
  }, 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);

在超时内执行的函数中设置更短的超时。

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

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:http://jsfiddle.net/6a0db6rq/

demo

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

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

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

您可能还想 clearTimeout on mouseout :

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