Функция отказов в Jquery?
Я искал функцию отказов или способ отказов в Jquery. Создание анимации может стать очень раздражающим. Вот код:
function fade() {
$('.media').hide();
$('.media').fadeIn(2000);
}
var debounce = false;
function colorChange() {
if (debounce) return;
debounce = true;
$('.centered').mouseenter(function() {
$('.centered').fadeTo('fast', .25);
});
$('.centered').mouseleave(function() {
$('.centered').fadeTo('fast', 1);
});
}
function colorChange2() {
$('.centered2').mouseenter(function() {
$('.centered2').fadeTo('fast', .25);
});
$('.centered2').mouseleave(function() {
$('.centered2').fadeTo('fast', 1);
});
}
function colorChange3() {
$('.centered3').mouseenter(function() {
$('.centered3').fadeTo('fast', .25);
});
$('.centered3').mouseleave(function() {
$('.centered3').fadeTo('fast', 1);
});
}
function closerFade() {
$('.closer').hide();
$('.closer').fadeIn(2000);
}
Я завернул все это в $(document).ready(function() {
Есть ли способ отговорить??
1 ответ
Я бы просто включил underscore.js в свой проект и использовал бы функцию debounce, которая в нем содержится. Работает отлично. Я использовал это в нескольких проектах.
debounce_.debounce(функция, ожидание, [немедленное]) Создает и возвращает новую отклоненную версию переданной функции, которая откладывает выполнение до истечения миллисекунд ожидания с момента последнего вызова. Полезно для реализации поведения, которое должно происходить только после того, как входные данные перестали поступать. Например: предварительный просмотр комментария к Markdown, пересчет макета после того, как размер окна перестает изменяться, и так далее.
В конце интервала ожидания функция будет вызываться с аргументами, которые были переданы самой последней функции в функцию debounce.
Передайте true для непосредственного аргумента, чтобы вызвать debounce, чтобы вызвать функцию на ведущем, а не на заднем фронте интервала ожидания. Полезно при таких обстоятельствах, как предотвращение повторного двойного нажатия кнопки "Отправить" во второй раз.
var lazyLayout = _.debounce(calculateLayout, 300); $(window).resize(lazyLayout);
Мне не нравится идея включить библиотеку только для функции debounce. Вы можете просто сделать:
var debounce = null;
$('#input').on('keyup', function(e){
clearTimeout(debounce );
debounce = setTimeout(function(){
$.ajax({url: 'someurl.jsp', data: {query: q}, type: 'GET'})
}, 100);
});