Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何向CSS垂直下拉菜单添加延迟_Javascript_Jquery_Menu - Fatal编程技术网

Javascript 如何向CSS垂直下拉菜单添加延迟

Javascript 如何向CSS垂直下拉菜单添加延迟,javascript,jquery,menu,Javascript,Jquery,Menu,我需要给我的下拉菜单的mouseover事件添加一个延迟,这样,如果有人在菜单上鼠标移动到页面上的另一个链接,菜单将不会立即下拉。 谢谢你的帮助 可以使用CSS3动画或过渡 或者您可以用Javascript处理超时,我认为一个简单的方法是在显示之前附加一个setTimeout;在mouseleave事件上使用clearTimeout您可以使用CSS3动画或转换 或者您可以用Javascript处理超时,我认为一个简单的方法是在显示之前附加一个setTimeout;在mouseleave事件上使用

我需要给我的下拉菜单的mouseover事件添加一个延迟,这样,如果有人在菜单上鼠标移动到页面上的另一个链接,菜单将不会立即下拉。 谢谢你的帮助


可以使用CSS3动画或过渡


或者您可以用Javascript处理超时,我认为一个简单的方法是在显示之前附加一个setTimeout;在mouseleave事件上使用clearTimeout

您可以使用CSS3动画或转换

或者您可以用Javascript处理超时,我认为一个简单的方法是在显示之前附加一个setTimeout;在mouseleave事件上使用clearTimeout

您可以添加一个setTimeout来延迟显示,在悬停时清除超时,这样,如果用户在延迟结束之前将鼠标移出,它将被取消。您可以将其封装在自己的jQuery插件中:

jQuery.fn.hoverWithDelay = function(inCallback,outCallback,delay) {
    this.each(function(i,el) {
        var timer;
        $(this).hover(function(){
           timer = setTimeout(function(){
              timer = null;
              inCallback.call(el);
           }, delay);
        },function() {
           if (timer) {
              clearTimeout(timer);
              timer = null;
           } else
              outCallback.call(el);
        });
    });
};
您可以这样使用:

$('ul.top-level li').hoverWithDelay(function() {
    $(this).find('ul').show();
}, function() {
    $(this).find('ul').fadeOut('fast', closeMenuIfOut);
}, 500);
我匆忙拼凑了这个插件,所以我相信它可以改进,但它似乎在您的演示的更新版本中起作用:

至于解释我的代码是如何工作的:.each循环遍历调用函数的jQuery对象中的所有元素。对于每个元素,将创建一个悬停处理程序,该处理程序使用setTimeout延迟调用提供的回调函数-如果在时间结束之前发生鼠标移动,则清除该超时,以便不调用inCallback。在IncCallback和outCallback上使用.call方法为此设置正确的值。

您可以添加一个setTimeout来延迟显示,并在悬停时清除超时,这样,如果用户在延迟结束之前将鼠标移出,它将被取消。您可以将其封装在自己的jQuery插件中:

jQuery.fn.hoverWithDelay = function(inCallback,outCallback,delay) {
    this.each(function(i,el) {
        var timer;
        $(this).hover(function(){
           timer = setTimeout(function(){
              timer = null;
              inCallback.call(el);
           }, delay);
        },function() {
           if (timer) {
              clearTimeout(timer);
              timer = null;
           } else
              outCallback.call(el);
        });
    });
};
您可以这样使用:

$('ul.top-level li').hoverWithDelay(function() {
    $(this).find('ul').show();
}, function() {
    $(this).find('ul').fadeOut('fast', closeMenuIfOut);
}, 500);
我匆忙拼凑了这个插件,所以我相信它可以改进,但它似乎在您的演示的更新版本中起作用:


至于解释我的代码是如何工作的:.each循环遍历调用函数的jQuery对象中的所有元素。对于每个元素,将创建一个悬停处理程序,该处理程序使用setTimeout延迟调用提供的回调函数-如果在时间结束之前发生鼠标移动,则清除该超时,以便不调用inCallback。inCallback和outCallback使用.call方法来设置正确的值。

我更新了代码,现在您的菜单在1/2秒后出现。

这足以延迟jquery中显示的动画


我刚刚用另一个div暂停了动画,你可以看到它。

我更新了代码,现在你的菜单在1/2秒后出现。

这足以延迟jquery中显示的动画


我刚刚用另一个div暂停了动画,你可以看到。

请原谅我的无知,我是一个新手@javascript。我试图添加它,但显然做得不对。请原谅我的无知,我是@javascript的新手。我试图添加它,但显然我做得不对。