Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.04.2013, 09:33
Новичок на форуме
Отправить личное сообщение для shmonoff Посмотреть профиль Найти все сообщения от shmonoff
 
Регистрация: 08.04.2013
Сообщений: 3

Блокирование .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() и флагов, но результата так и не добился - обработчик нового события упорно срабатывает до окончания предыдущей анимации. Уповаю на ваш опыт, друзья.
Ответить с цитированием
  #2 (permalink)  
Старый 08.04.2013, 09:36
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Самый простой и грубый способ - на время анимации заслонить экран прозрачным дивом, клик по которому ничего не делает.
Ответить с цитированием
  #3 (permalink)  
Старый 08.04.2013, 09:45
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Или с флагом:
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;
           });
        }
    })
})
Ответить с цитированием
  #4 (permalink)  
Старый 08.04.2013, 09:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

$(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); // вешаем его обратно
        });
    })
})
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2013, 10:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Тут бы что-то вроде
addEventListener('click', function(e) { e.cancelBubble = true }, true);
помогло если б не IE...
Или pointerEvents:none.
Хотя проще и эффективнее - способ, описанный tsigel..
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2013, 14:46
Новичок на форуме
Отправить личное сообщение для shmonoff Посмотреть профиль Найти все сообщения от shmonoff
 
Регистрация: 08.04.2013
Сообщений: 3

Всем спасибо, ничего не получается
даже такой интересный код подсказали, и то не работает:
$('.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);
            }
        })
    ;
});
Ответить с цитированием
  #7 (permalink)  
Старый 08.04.2013, 14:50
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Если ничего не получается - значит что-то не правильно делаете. Мой первый предложный метод не может не работать (правда он груб, зато эффективен).
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2013, 02:19
Новичок на форуме
Отправить личное сообщение для shmonoff Посмотреть профиль Найти все сообщения от shmonoff
 
Регистрация: 08.04.2013
Сообщений: 3

в общем на время анимации закрываю экран прозрачным дивом, все остальные способы не работают почему-то
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает .click() при создании элемента OneTwo.. Events/DOM/Window 2 21.12.2012 12:16
в содержимом окна FancyBox не работает событие .click() rafic jQuery 4 01.11.2011 14:59
.click в Mozilla krokusandr jQuery 2 31.10.2011 09:10
Не срабатывает .click() в хроме rootv Общие вопросы Javascript 16 16.10.2011 23:40
Помогите сменить событие .hover на .click serdeles jQuery 2 22.11.2010 16:07