JQuery slideDown函数和display:block?

时间:2013-08-27 04:40:09

标签: jquery

我使用jQuery slideDown函数创建了一个菜单,一切似乎都运行正常,但有时当你快速移动按钮实现子菜单出现在slideDown效果之前。

Web工具显示它是因为“display block”的应用速度比height更快。

有谁知道解决方案?这是我的代码:

$( document ).ready(function() {
  var submenu = $("#sub-menu"),
      activeSlide = $("#active"),
      startPos = activeSlide.position().left;

  $("#parent").hover(
    function() {
      submenu.stop(true, false).slideDown( 600);
    },
     function() {
      submenu.stop(true, false).slideUp( 600);
    });

  $(".nav > li").mouseenter(function() {
    var nextPos = $(this).position().left + startPos;
    activeSlide.animate({left: nextPos}, 250);
  });

   $(".nav").mouseleave(function() {
    activeSlide.animate({left: startPos}, 250);
  });

});// end ready

DEMO

4 个答案:

答案 0 :(得分:1)

您可以测试此代码。

$( document ).ready(function() {
  var submenu = $("#sub-menu"),
      activeSlide = $("#active"),
      startPos = activeSlide.position().left;


  $("#parent").hover(
    function() {
      submenu.stop(true, true).slideDown( 600);
    },
     function() {
      submenu.stop(true, true).slideUp( 600);
    });

  $(".nav > li").mouseenter(function() {
    var nextPos = $(this).position().left + startPos;

    activeSlide.stop().animate({left: nextPos}, 250);
  });

   $(".nav").mouseleave(function() {

    activeSlide.stop().animate({left: startPos}, 250);
  });

});// end ready

答案 1 :(得分:0)

动画制作时需要添加.stop()

activeSlide.stop().

答案 2 :(得分:0)

stop(true,false)更改为stop(true,false)

$("#parent").hover(
    function () {
        submenu.stop(true, true).slideDown(600);
    },
    function () {
        submenu.stop(true, true).slideUp(600);
    });

.stop()第一个参数'清除队列',第二个参数将使动画'跳转到结束'。

.stop([clearQueue],[]jumpToEnd)

以下是更多信息的链接:http://api.jquery.com/stop/

答案 3 :(得分:0)

父母悬停功能的简单更改

$("#parent").hover(
function() {
  submenu.stop(true, false).slideDown( 600);
},
 function() {
  submenu.stop(true, false).slideUp( 600).hide();
});

在幻灯片后使用隐藏功能。请立即测试。