Есть много способов сделать это. Самый простой способ — не удалять обработчик кликов, а просто ничего не делать в обратном вызове, если он уже анимируется, например:
$('.thumb').click(function() {
if ($('#thumb-strip:animated').size() != 0)
return;
/* else animate #thumb-strip */
});
Если вы хотите удалить обработчик кликов и добавить его раньше, просто сделайте следующее:
var animateHandler = function() {
var params = {}; // animate params
$('.thumb').unbind('click', animateHandler); // unbind the click handler
$('#thumb-strip').animate(params, function() {
$('.thumb').click(animateHandler); // re-bind the click handler when animation is done
});
};
$('.thumb').click(animateHandler);
Излишне говорить, что первый способ проще.
Однако то, что я обычно делаю, не предотвращает событие click, потому что пользователь этого не ожидает, но я также хочу избавиться от очереди анимаций. Итак, что вы можете сделать, так это позволить пользователю щелкнуть большим пальцем и заставить его мгновенно анимироваться в новом месте с помощью stop
:
$('.thumb').click(function() {
var params = {}; // animate params
$('#thumb-strip').stop().animate(params);
});
Это самое простое и интуитивно понятное решение.
И чтобы ответить на ваш второй вопрос, вы можете использовать $(this).position()
, чтобы получить положение большого пальца относительно родителя, а затем анимировать на основе этого.
person
reko_t
schedule
09.08.2010