2013-02-14 163 views
1

我建立一個小的重載插件用於即將開展的項目,下面的代碼工作有一點瑕疵的:jQuery的覆蓋插件

$(document).ready(function() 
    { 

     var clickable_link = $('.p_wrapper p'), 
      overlay = $('#overlay'), 
      close_overlay = $('.close_overlay'); 

     clickable_link .click(function(evt){ 
      evt.preventDefault(); 
      //if there is no content 
      current_link = $(this).attr('class'); 
      var overlay_content = $('#'+current_link); 
      overlay.children().fadeOut(500, function(){ 
       overlay_content.fadeIn(); 
      }); 
      overlay.fadeIn(); 
     }); 

     overlay.click(function(){ 
      overlay.fadeOut(); 
      overlay.children().fadeOut(500); 
     }); 
    }); 

如果我點擊了第一次「clickable_link」這一切都很好,但如果我保持疊加打開,然後再次點擊'clickable_link',疊加fadesOut的第一個內容,然後新的淡入淡出,但一個接一個地不在同一時間(這將看起來更好,更平滑)Full code here

回答

2

您可以存儲最後點擊的鏈接:http://jsfiddle.net/PWV3q/15/

$(document).ready(function() { 

    var clickable_link = $('.p_wrapper p'), 
     overlay = $('#overlay'), 
     close_overlay = $('.close_overlay'); 

    overlay.hide(); 
    var lastLink = null; 
    clickable_link.click(function (evt) { 
     evt.preventDefault(); 
     if (lastLink != this) { 
      lastLink = this; 
      //if there is no content 
      current_link = $(this).attr('class'); 
      var overlay_content = $('#' + current_link); 
      overlay.children().fadeOut(500, function() {}).promise().done(function() { 
       overlay_content.fadeIn(); 
      }); 
      if (!overlay.is(':visible')) overlay.fadeIn(); 
     } 
    }); 

    overlay.click(function() { 
     overlay.fadeOut(); 
     overlay.children().fadeOut(500); 
    }); 
}); 
+0

mmm它stil有同樣的問題..... – Alex 2013-02-14 11:41:12

+1

好吧,這是因爲孩子返回3個元素,然後3個fadeout完成回調調用=> overlay_content.fadeIn()發生3次。檢查我的最新更新 – sdespont 2013-02-14 12:19:21

+0

偉大的工作很好,但在這種情況下,'承諾'如何工作? – Alex 2013-02-14 12:27:11