2012-03-22 3 views
1

У меня простая анимация, проблема в том, что я хочу, чтобы анимация закончилась, прежде чем я могу снова щелкнуть?jquery- избегать двойных щелчков

$(".next").click(function() { 

$('#result').animate({ 
    left: '-=250', 
    }, 1000, function() { 
    pos = $('#result').position(); 

    if (pos.left <= -550) { 
$('.next').hide(); 
    } 
    if (pos.left <= -250) { 
    $('.prev').show(); 
    } 
}); 
+0

У вас есть скрипка, которую вы можете поделиться? – Sethen

ответ

1

Ответ прост, используйте метод .data() установить флаг интерактивного по этому пункту. Вы можете повторно включить его в своей полной функции.

От jQuery.com: .data() Documentation

метод .data() позволяет присоединить данные любого типа к DOM элементов таким образом, что является безопасным из циклических ссылок и, следовательно, от утечек памяти.

Мы можем установить несколько различных значения для одного элемента и получить их позже:

Используя полный метод на анимации (который вы уже используете, чтобы показать/скрыть следующую/предыдущую кнопку , мы можем повторно активировать кнопку, чтобы быть нажата.

Обратите внимание, что мы храним $(this) в btn так можно получить от закрытия функции полный.

$(".next").click(function() { 
    var btn = $(this); 
    if (btn.data('running')) 
    return; 

    btn.data('running', true); 

    $('#result').animate({ 
    left: '-=250', 
    }, 1000, function() { 
     pos = $('#result').position(); 

     if (pos.left <= -550) { 
     $('.next').hide(); 
     } 
     if (pos.left <= -250) { 
     $('.prev').show(); 
     } 

     // Unset it here, this lets the button be clickable again 
     btn.data('running', false); 
    } 
    ); 
}); 
+0

Не работает .data в HTML 5? –

+1

'.data' не совпадает с атрибутами' data-item = "asd" '. Он существует с момента jQuery 1.3 и хранит данные, относящиеся к объекту jQuery, который обертывает этот dom. Начиная с jQuery 1.4.3 .data() автоматически заполняется 'data-attributes', но' .data() 'полностью поддерживается в pre HTML5. Это просто хранение javascript-объекта в памяти. – Aren

+0

Ницца! не знал этого, спасибо! –

0

Отключение кнопки на мыши, а также использование использовать функцию «SetTimeout», чтобы включить его после того, как тот же период времени.

$(".next").click(function() { 

    $(this).enabled = false; 
    setTimeout('enableButtons()', 250);  } 

    $('#result').animate({ 
     left: '-=250', 
    }, 1000, function() { 
    pos = $('#result').position(); 

    if (pos.left <= -550) { 
$('.next').hide(); 
    } 
    if (pos.left <= -250) { 
    $('.prev').show(); 
    } 
}); 

function enableButtons() { 
    $(".next").enabled = true; 
} 
1

Вы можете сделать так, что анимация автоматически завершается до animate начинается снова:

$('#result').stop(true, true).animate({ ... 
+0

Это был метод, который, как я думал, будет работать, он не – LeBlaireau

1

отключить кнопку мыши и использовать полный вызов функции из .animate функции повторно включить его:

.animate (свойства [, длительность] [, ослабление] [, полная])

полная Функция для вызова после завершения анимации.

Смежные вопросы