2010-07-22 141 views
0

我有以下代码:jQuery的幻灯片切换帮助

$("a.sticky-link").click(function (e) { 
     e.preventDefault(); 

     $("div.stickies-box").slideToggle('slow'); 
     $("a.sticky-link").toggleClass("selected"); 
    }); 

    $("div.stickies-box").mouseup(function() { 
     return false 
    }); 
    $(document).mouseup(function (e) { 
     if ($(e.target).parent("a.sticky-link").length == 0) { 
      $("a.sticky-link").removeClass("selected"); 
      $("div.stickies-box").slideUp('slow'); 
     } 
    }); 

这基本上显示和隐藏,当用户点击一个按钮一个div,然后隐藏它应该,他们可以点击其他地方在页面上。我遇到的问题是,如果该框已显示,并且用户再次单击该按钮(假设他们打算隐藏该框),则只需快速隐藏并重新显示该框,当我想要的时候就隐藏框。

而不是滑动可以将效果改变为实际上下移动,因为滑动效果看起来更像是擦拭。

谢谢。

回答

1

的主要问题是,你的鼠标松开事件将在<a> click事件之前进行发射。

您可以检测到您的鼠标松开事件不存在的对a.sticky-linkdiv.stickies-box躲藏在箱子前:

$("a.sticky-link").click(function (e) { 
    e.preventDefault(); 

    $("div.stickies-box").slideToggle('slow'); 
    $("a.sticky-link").toggleClass("selected"); 
}); 

$(document).mouseup(function (e) { 
    var $targ = $(e.target); 
    // if we are the link or the box, exit early 
    if ($targ.is('a.sticky-link') || $targ.is('div.stickies-box')) return; 
    // if we have a parent who is either, also exit early 
    if ($targ.closest('a.sticky-link,div.stickies-box').length) return; 

    // hide the box, unselect the link 
    $("a.sticky-link").removeClass("selected"); 
    $("div.stickies-box").slideUp('slow'); 
}); 
+0

比我想要的更多的代码,但它很有用,谢谢。有关替代效果的任何想法,以便盒子向上移动而不是擦拭效果? – Cameron 2010-07-22 09:31:31

+0

假设一个绝对定位的盒子,你可以使用['.animate()'](http://api.jquery.com/animate)来改变它的“顶部”,把它从屏幕上推下来,如果这就是你的意思。 – gnarf 2010-07-22 09:37:26

+0

刚刚注意到一个问题。我必须点击按钮才能关闭该框,如果用户点击页面上的其他任何位置,我也希望它隐藏。 – Cameron 2010-07-22 10:47:32

1

我只是在想这件事,并会删除我的其他答案,如果这一个结束了工作......

你也许能够只stopPropagation()在鼠标松开事件,请更换您目前有div.stickies-box与此一:

$("div.stickies-box,a.sticky-link").mouseup(function (e) { 
    e.stopPropagation(); 
}); 
+0

原来的代码能正常工作,但在某些页面上无法正常工作,不知道为什么。但如果您认为自己有更好的解决方案,请随时更新您的答案,谢谢。 – Cameron 2010-07-22 11:50:22