【问题标题】:JQuery mouseout timeoutjQuery mouseout 超时
【发布时间】:2009-09-17 17:43:35
【问题描述】:

之前已经处理过类似的问题,但由于使用了 bind() 函数,我相信我的问题略有不同。总之……

$('.overlay').bind("mouseenter",function(){
  $(this).fadeTo('slow', 0);
}).bind("mouseleave",function(){                
  setTimeout(function() { 
    $(this).fadeTo('slow', 1);
  }, 2000);
});

我想淡出“mouseenter”上的叠加层,但只在“mouseleave”后 2000 毫秒内淡出。

我还有一个问题:当 .overlay div 淡出时,我需要能够单击它下面的内容,即我需要 div 完全消失或向下移动 z-index 堆栈。但是,如果我尝试添加它,脚本会认为鼠标已经离开 .overlay div,因此 .overlay 会淡入。

出于同样的原因,我不能使用fadeOut() 和fadeIn()。

【问题讨论】:

  • 添加了一个附加问题...

标签: jquery mouse effects fade mouseenter


【解决方案1】:

当超时触发this 将不是您所期望的。你可以像这样创建一个闭包:

            $('.overlay').bind("mouseenter",function(){
                    $(this).fadeTo('slow', 0);
                    }).bind("mouseleave",function(){
                    var $this = $(this);                               
                    setTimeout(function() { 
                            $this.fadeTo('slow', 1);
                            }, 2000);
            });

【讨论】:

  • 两个问题:var $this = ...中的'$'有什么意义吗? $(this) 在你得到的原始代码中指的是什么?
  • 不,var $this 中的 $ 只是为了让变量看起来更 jQueryish。 $ 字符在 javascript 中没有特殊含义。并且它只是 jQuery 中“jQuery”的别名。
  • 工作正常,谢谢 - 我现在看到包装在 setTimeout 函数中的 $(this) 指的是不同的东西。
  • OK 我还有一个问题:当 .overlay div 淡出时,我需要能够点击它下面的内容,即我需要 div 完全消失或向下移动 z-index 堆栈.但是,如果我尝试添加它,脚本会认为鼠标已离开 .overlay div,因此 .overlay 会淡入。出于同样的原因,我不能使用 fadeOut() 和 fadeIn()。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2012-02-10
  • 2012-01-05
  • 2012-06-08
  • 1970-01-01
  • 2012-08-05
  • 2012-11-10
相关资源
最近更新 更多