1

我创建了一些脚本来在单击粗体标题时显示列表,并在单击另一个标题时隐藏相同的列表。

有没有办法让动画在动画运行时忽略额外的点击?

这是我创建的小提琴:

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;}
4

2 回答 2

2

您可以只创建一个 var :

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

在回调之后isMoving = false;

于 2013-05-29T14:45:48.013 回答
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() );
        }
    });
于 2013-05-29T14:42:30.203 回答