2013-05-29 109 views
1

我創建了一些腳本來顯示一個列表,當一個粗體標題被點擊時,並且當另一個標題被點擊時隱藏同一個列表。jQuery動畫,忽略其他點擊直到動畫完成

有沒有一種方法讓動畫在動畫運行時忽略其他點擊?

這裏是我創建了一個小提琴:

http://jsfiddle.net/VBh5f/

下面是HTML:

<ul id="accordion" class="collapsible"> 
    <li class="main"><span>+</span> <b>Oil and Vinegar</b> 
     <ul> 
      <li>Extra Virgin Olive Oil</li> 
      <li>Nut and Seed Oils</li>  
      <li>Balsamic Vinegar</li> 
      <li>Wine Vinegar</li> 
     </ul> 
    </li>   
    <li class="main"><span>+</span> <b>Coffee and Tea</b> 
     <ul> 
      <li>Mariage Frères Tea</li>  
      <li>Peaberry&#039;s Coffee and Tea</li> 
     </ul> 
    </li>  
</ul> 

這裏是JavaScript:

function show(i) { 
    $('.main > ul:eq('+i+')').css(
    { 
     display:'block' 
    } 
    ).animate(
    { 
     opacity: 1 
    }, 
    100, 
    function() { 
     $(this).parent().find('span').text('-'); 
    } 
); 
} 

function hide(i) { 
    $('.main > ul:eq('+i+')').css(
    { 
     display:'none' 
    } 
    ).animate(
    { 
     opacity: 1 
    }, 
    100, 
    function() { 
     $(this).parent().find('span').text('+'); 
    } 
); 
} 

function listControl(i, doWhat) { 
    $('.main').each(function(index, elem) { 
    hide(index); 
    }); 
    if (doWhat === 'showList') { 
    show(i); 
    } 
} 

function click() { 
    $('.main').on('click', function() { 
    if ($(this).find('ul').css('display') === 'none') { 
     listControl($(this).index(), 'showList'); 
    } 
    else { 
     listControl($(this).index()); 
    } 
    }); 
} 

$(document).ready(function() { 
    click(); 
}); 

這裏是CSS:

ul {list-style:none;} 
.main > ul {display:none;} 

回答

2

試試這個:

http://jsfiddle.net/VBh5f/10/

$('.main').on('click', function() { 
     if($('#accordion ul').is(':animated')) return; 
     if ($(this).find('ul').css('display') === 'none') { 
      listControl($(this).index(), 'showList'); 
     } 
     else { 
      listControl($(this).index()); 
     } 
    }); 
+2

+1這顯示的片體需要的答案:['.is(':animated')'](http://api.jquery.com/animated-selecto r /) – Orbling

+0

雅,但是我很難在OP中看到任何動畫jsfiddle –

+0

謝謝。如果你不介意,什麼是.is(':animated')在做什麼?在這種情況下返回意味着無效的權利?對不起,我只是試着學習,我以前沒見過.is()。 編輯:我檢查了jQuery的網站。也感謝Orblin的鏈接。 – Mdd

2

您只需創建一個變種:

isMoving = true; 
if(!isMoving){ 
//your code 
} 

而且回調後isMoving = false;