2010-07-22 193 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