2013-02-08 112 views
2

我正在用一些jQuery效果更新我的客戶端的web畫廊。我已經做了一些成功的改變,但是現在我對最後的腳本有問題。一切工作正常,但當你快速點擊開始,動畫打破常規模式,一切都是一團糟。我知道我需要使用stop()函數,但我不能使它工作100%,因爲它應該工作。不知道在哪裏把「.stop()」放在我的jQuery腳本中

$(function() { 
    $(".gallery_view_switch").toggle(function() { 

     $(this).html('Switching ...'); 
     $(".sidebar").slideToggle('slow', function() { 
      $(".single_page").animate({width: 870}, 700), 
      $('img.gallery').css('margin-left', '5px'), 
      $('#top').css('margin-right', '-290px'), 
      $('.gallery_view_switch').html('Show gallery navigation'); 
     }); 

    },function() { 

     $(this).html('Switching ...'); 
     $('img.gallery').css('margin-left', '12px'), 
     $(".single_page").animate({width: 550}, 700, function() { 
      $('#top').css('margin-right', '30px'), 
      $(".sidebar").slideToggle('slow'), 
      $('.gallery_view_switch').html('Hide gallery navigation'); 
     }); 
    }); 
}) 

所以,我們有一個「上點擊」這裏的行動,側邊欄與畫廊導航上升和內容獲得額外的尺寸和新的CSS屬性的圖像,使畫廊現在有更多更廣泛的觀點。

第二次點擊時,內容獲取原始大小和屬性,側邊欄切換回原始位置。

我在這裏想要做的是停止動畫隊列的額外點擊,並且不允許在所有事情都已準備就緒之前發生新的動畫。

謝謝!

編輯2:

$(function() { 

    var isExpanding = false; 

    $(".gallery_view_switch").toggle(function() { 

     if(!isExpanding) {   

      $(this).html('Switching ...'); 

      $(".sidebar").slideToggle('slow', function() { 

       isExpanding = true; 

       $(".single_page").animate({ 
        width: 870 
       }, 700), 
       $('img.gallery').css('margin-left', '5px'), 
       $('#top').css('margin-right', '-290px'), 
       $('.gallery_view_switch').html('Show gallery navigation'); 

       isExpanding = false; 

      }); 
     } 
    },function() { 
     if(!isExpanding) { 

      $(this).html('Switching ...'); 
      $('img.gallery').css('margin-left', '12px'), 

      $(".single_page").animate({ 
       width: 550 
      }, 700, function() { 

       isExpanding = true; 


       $('#top').css('margin-right', '30px'), 
       $(".sidebar").stop().slideToggle('slow'), 
       $('.gallery_view_switch').html('Hide gallery navigation'); 

       isExpanding = false; 

      }); 
     } 
    }); 

}) 

而另一位編輯,仍然沒有工作...我真的不明白,究竟是什麼我必須在這裏改變,使其工作?我嘗試了很多真正的/錯誤的組合,沒有成功,它以前工作過,有重疊。或者在一些真/假組合中,它被完全鎖定,並且一旦展開就不能返回。

+0

要小心,因爲jQuery的1.9下跌了使用'切換的() '功能,如果我沒有弄錯..(http://jquery.com/upgrade-guide/1.9/#toggle-function-function-removed) – 2013-02-08 20:26:04

+0

我不認爲'停止()'是你'重新尋找。它不會阻止點擊,它只會清除動畫隊列(並且可以選擇跳轉到隊列末尾)。下面,Soyuka有正確的想法。 – showdev 2013-02-08 20:28:33

+0

看到我的編輯,但它會更容易與一個JS小提琴,我不明白你的方式做到這一點... – soyuka 2013-02-08 21:25:06

回答

0

我會做這樣的避免雙重事件:

$(function() { 

var isExpanding = false; 

$(".gallery_view_switch").toggle(function() { 

    if(!isExpanding) { 
     //stuff 
     $(".sidebar").slideToggle('slow', function() { 
      isExanding = true; 
      //Do your stuff 
      isExpanding = false; 
     }); 
    } 
},function() { 
    if(!isExpanding) { 
     $(".single_page").animate({width: 550}, 700, function() { 
      isExanding = true; 
      //Do your stuff 
      isExpanding = false; 
     }); 
    } 
}); 
+0

** Showdev **是正確的,」stop()「顯然贏了在這裏終於工作了,我一直在嘗試幾個小時,問題在於它不會阻止動畫重疊(邊欄通過content div或其他方式)。 ** @iight ** - 我不認爲問題出現在jQuery版本中,因爲我使用的是舊版本,而不是1.9。我相信人們以前用切換功能製作比我更復雜的東西。 我現在正在嘗試** soyuka **的解決方案,將在幾分鐘內回覆我的反饋。 – 2013-02-08 20:47:23

+0

我對soyuka解決方案的反饋可以在我原來的,現在編輯的帖子中看到。 – 2013-02-08 21:07:12

+0

在原文中編輯2。 – 2013-02-08 23:44:16

1

在動畫功能的使用.stop()

$(function() { 
    $(".gallery_view_switch").toggle(function() { 

     $(this).html('Switching ...'); 
     $(".sidebar").stop().slideToggle('slow', function() { 
      $(".single_page").stop().animate({width: 870}, 700), 
      $('img.gallery').css('margin-left', '5px'), 
      $('#top').css('margin-right', '-290px'), 
      $('.gallery_view_switch').html('Show gallery navigation'); 
     }); 

    },function() { 

     $(this).html('Switching ...'); 
     $('img.gallery').css('margin-left', '12px'), 
     $(".single_page").stop().animate({width: 550}, 700, function() { 
      $('#top').css('margin-right', '30px'), 
      $(".sidebar").stop().slideToggle('slow'), 
      $('.gallery_view_switch').html('Hide gallery navigation'); 
     }); 
    }); 
}) 
+0

這不符合要求:''我在試圖這裏要做的是停止動畫隊列的額外點擊,並且不允許在所有事情都已準備就緒之前發生新的動畫。「' – showdev 2013-02-08 20:32:33