0

这是我的小提琴。如您所见,我定义了一个简单的单击事件处理程序:

$('#traveller > a').click(function(e) {
    e.preventDefault();

    var $ul = $('#traveller ul');
    if($(this).hasClass('handle-next')) {
        if(Math.abs($ul.position().top - parentPadding) < totalHeight - itemHeight) {
            $ul.animate({top: '-=' + itemHeight});
        }
    }
    else {
        if($ul.position().top - parentPadding < 0) {
             $ul.animate({top: '+=' + itemHeight});
        }
    }
});

我注意到当我快速双击几次时,按a.handle-next/ a.handle-prevul位置会意外改变。

我如何避免这种行为?

4

4 回答 4

4

只需检查是否$ul动画:

if($ul.is(':animated')) return;

演示

于 2013-07-22T08:48:12.773 回答
0

在执行事件处理程序的主体之前检查是否正在发生动画。

if(!$ul.is(":animated")){
    if($(this).hasClass('handle-next')) {
        if(Math.abs($ul.position().top - parentPadding) < totalHeight - itemHeight) {
            $ul.animate({top: '-=' + itemHeight});
        }
    }
    else {
        if($ul.position().top - parentPadding < 0) {
            $ul.animate({top: '+=' + itemHeight});
        }
    }
}

工作示例 http://jsfiddle.net/A5u43/19/

于 2013-07-22T08:52:23.293 回答
0

您需要锁定旅行者的任何动作,直到动画完成。这里我使用了锁定变量,但你可以使用任何方法来锁定它。为此,在动画上使用回调:

      $ul.animate({top: '-=' + itemHeight}, 400, 'swing', function(){
            lock = false;
        });

这是jsfiddle之类的

于 2013-07-22T08:52:46.200 回答
0

你可以用 $ul.stop(); 来阻止它。就在你定义 $ul 是谁之前

这是小提琴

var $ul = $('#traveller ul');
$ul.stop(true,true);

http://jsfiddle.net/A5u43/23/

于 2013-07-22T09:00:19.280 回答