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

时间:2015-03-25 13:02:03

标签: jquery settimeout

我需要首次延迟功能,然后延迟正常使用

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

然后

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

rundelay(5000 + delaytime);

答案 1 :(得分:1)

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

然后通过超时延迟调用此函数:

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/

答案 2 :(得分:1)

<强> demo

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

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

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

您可能还希望clearTimeout上的mouseout

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

答案 3 :(得分:0)

此代码将为您做到

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

    }, 4000);
}, 5000);