【问题标题】:How to prevent multiple clicks triggering multiple animations如何防止多次点击触发多个动画
【发布时间】:2015-05-06 23:15:21
【问题描述】:

我想知道如何防止多次点击,或者因为多次点击而多次触发一个事件。

假设我必须为一个对象设置动画。 一个按钮触发动画,另一个按钮重置动画。

<div class="div">
   Animate Me!
</div>
<div class="nav">
    <div class="start">start</div>
    <div class="reset">reset</div>
</div>

我不在乎用户点击“星号”按钮多少次,动画必须只触发一次。 这并不意味着将来不能再触发动画。动画重置后,可以再次触发,以此类推。

$( '.start' ).click(function(){
    $('.div').animate({
        left: '+=' + 100});
});

$( '.reset' ).click(function(){
    $('.div').animate({
        left: 50});
});

这是我愿意做的一个例子:fiddle

尽量点击“开始”按钮,动画会根据点击次数触发。

我在网上查了一下,发现有两种方法可以防止多次点击。但是,它们似乎不适用于我。

1) 使用 .unbind() found here:

$( '.reset' ).unbind().click(function(){
    $('.div').animate({
        left: 50});
});

但它不起作用:fiddle;

2) 使用 event.stopImmediatePropagation found here:

$( '.reset' ).click(function(event){
event.stopImmediatePropagation()
    $('.div').animate({
        left: 50});
});

也不行。 fiddle;

如何防止“开始”按钮多次触发动画?但是在点击“reset”按钮时才被点击?

【问题讨论】:

    标签: jquery css animation jquery-animate


    【解决方案1】:

    您可以向开始按钮添加一个帮助类,如果单击重置按钮,则将其删除。

    $('.start').click(function () {
        if(!$(this).hasClass('move')){
            $(this).addClass('move');
            $('.div').animate({
                left: '+=' + 100
            });
        }
    });
    
    $('.reset').click(function () {
        $('.start').removeClass('move');
        $('.div').animate({
            left: 50
        });
    });
    

    Fiddle

    更好:

    $('.nav').on('click', '.start:not(.move)', function () {
        $(this).addClass('move');
        $('.div').animate({
            left: '+=' + 100
        });
    });
    
    $('.reset').click(function () {
        $('.start').removeClass('move');
        $('.div').animate({
            left: 50
        });
    });
    

    Fiddle

    【讨论】:

    • 谢谢,我认为这是最好的解决方案。
    【解决方案2】:

    使用 jquery one 方法 http://api.jquery.com/one/

    $( '.start' ).click(function(){
    var div = $('.div:not(.animated)');
    div.animate({
            left: '+=' + 100}).addClass('animated');
    });
    
    $( '.reset' ).click(function(event){
    var animated = $('.div.animated');
    animated.animate({
            left: 50}).removeClass('animated');
    });
    .div {
        position: absolute;
        top: 150px;
        left: 50px;
        height: 100;
        width: 100;
        background-color: blue;
    }
    
    .start, .reset {
        display: table-cell;
        width:50%;
    }
    
    .start {
        background-color:green;
    }
    
    .reset{
        background-color:red;
    }
    
    }
    .nav {
        position: absolute;
        width: 100%;
        top: 0;
        right: 0;
        left: 0;
        height: 60px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div class="div">
       Animate Me!
    </div>
    <div class="nav">
        <div class="start">start</div>
        <div class="reset">reset</div>
    </div>

    【讨论】:

    • @dcdeiv 现在检查答案。较早的答案有一个缺点。如果您单击重置按钮最初动画将工作两次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多