jQuery动画,忽略额外的点击,直到动画完成

时间:2013-05-29 14:40:59

标签: javascript 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 个答案:

答案 0 :(得分: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() );
        }
    });

答案 1 :(得分:2)

您可以创建一个var:

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

在回调isMoving = false;

之后