首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery动画,忽略额外的点击,直到动画完成

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

Stack Overflow用户
提问于 2013-05-29 22:40:59
回答 2查看 143关注 0票数 1

我创建了一些脚本,用于在单击一个粗体标题时显示一个列表,并在单击另一个标题时隐藏该列表。

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

这是我创建的一个小提琴:

http://jsfiddle.net/VBh5f/

下面是HTML:

代码语言:javascript
复制
<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:

代码语言: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:

代码语言:javascript
复制
ul {list-style:none;}
.main > ul {display:none;}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-29 22:42:30

试试这个:

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

代码语言:javascript
复制
$('.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
EN

Stack Overflow用户

发布于 2013-05-29 22:45:48

您可以只创建一个var:

代码语言:javascript
复制
isMoving = true;
if(!isMoving){
//your code
}

然后在回调isMoving = false;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16816921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档