JavaScript问题:setTimeout

Jen*_*a70 0 javascript jquery settimeout jquery-hover jquery-animate

我正在尝试使用JavaScript和jQuery创建一个移动面板.

我做了这个工作演示,JS部分看起来像这样:

$("nav.nav").hover(function(){
    $("nav.nav").animate({left:'-5px'},100,"swing");
  },
  function(){
    $("nav.nav").animate({left:'-170px'},100,"swing");
  });
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它正在工作,但是当我离开面板时我想添加延迟,因为有一段时间,我错误地将面板留下1个像素,这很烦人.

我试着setTimeout("javascript function", milliseconds);像这样使用:

$("nav.nav").hover(function(){
    $("nav.nav").animate({left:'-5px'},100,"swing");
  }, setTimeout(function(){
      $("nav.nav").animate({left:'-170px'},100,"swing");
  },10));
Run Code Online (Sandbox Code Playgroud)

(超时中的回调函数)但它不起作用,我不知道为什么.

Ant*_*ton 7

你需要像这样使用hover out函数里面的函数

var tOut = null;
$("nav.nav").hover(function () {
    clearTimeout(tOut); //Clear timout so it doesn't animate back when hovering
    $("nav.nav").animate({
        left: '-5px'
    }, 100, "swing");
},function () {
    tOut = setTimeout(function () {
        $("nav.nav").animate({
            left: '-170px'
        }, 100, "swing");
    }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

DEMO


jfr*_*d00 5

我建议使用jQuery .delay()(结合.stop(true))自动处理计时器的东西:

$("nav.nav").hover(function () {
    $("nav.nav").stop(true).animate({left: '-5px'}, 100, "swing");
},function () {
    $("nav.nav").stop(true).delay(1000).animate({left: '-170px'}, 100, "swing");
});
Run Code Online (Sandbox Code Playgroud)

工作演示:http://jsfiddle.net/jfriend00/LuNHR/