Блокирование .click()
Подскажите пожалуйста, сам разобраться не могу:
есть контейнер, содержащий 9 других контейнеров, каждый из которых содержит еще по 2: <div class="common"> <div id="1"> <div class="front"></div> <div class="back"></div> </div> ... <div id="9"> <div class="front"></div> <div class="back"></div> </div> </div> и соответствующий обработчик анимации $(document).ready(function () { $('.common div').click(function() { $(this).find('div').rotate3Di('flip',500,{sideChange:mySideChange}) }) }) Суть проблемы в том, чтобы отключать обработчик на время выполнения анимации, то есть до окончания ее выполнения надо блокировать обработку события .click(). Ковырял в сторону setTimeout() и флагов, но результата так и не добился - обработчик нового события упорно срабатывает до окончания предыдущей анимации. Уповаю на ваш опыт, друзья. |
Самый простой и грубый способ - на время анимации заслонить экран прозрачным дивом, клик по которому ничего не делает.
|
Или с флагом:
var flag = new Boolean(true); $(document).ready(function () { $('.common div').click(function() { if (flag) { flag = false; $(this).find('div').rotate3Di('flip',500,{sideChange:mySideChange}, function () { flag = true; }); } }) }) |
$(document).ready(function () { var fn, div = $('.common div'); div.bind('click', fn = function() { div.unbind('click', fn); // снимаем обработчик $(this).find('div').rotate3Di('flip',500,{sideChange:mySideChange}, function() { div.bind('click', fn); // вешаем его обратно }); }) }) |
Тут бы что-то вроде
addEventListener('click', function(e) { e.cancelBubble = true }, true);помогло если б не IE... Или pointerEvents:none. Хотя проще и эффективнее - способ, описанный tsigel.. |
Всем спасибо, ничего не получается :(
даже такой интересный код подсказали, и то не работает: $('.common div').click(function() { var self = $(this) , func = arguments.callee ; self.unbind('click', func) .find('div') .rotate3Di('flip', 500, { sideChange: mySideChange complete: function () { self.click(func); } }) ; }); |
Если ничего не получается - значит что-то не правильно делаете. Мой первый предложный метод не может не работать (правда он груб, зато эффективен).
|
в общем на время анимации закрываю экран прозрачным дивом, все остальные способы не работают почему-то
|
Часовой пояс GMT +3, время: 01:23. |