Подтвердить что ты не робот

Приоритет событий Hammer.js

Я реализовал библиотеку hammer.js для своих событий. Проблема в том, что одновременно запускаются несколько событий.

Могу ли я установить somekind приоритета события. Пусть говорят, что при трансформации все остальные события игнорируются. Когда трансформация останавливается, другие события могут быть выполнены.

    hammertime.on("transform", function(evt) {
      //transform
    }

    hammertime.on("drag", function(ev) {
       //drag
    }

Я уже пробовал что-то вроде этого: Disabiling drag, когда мы начинаем трансформировать

 hammertime.on("transform", function(evt) {
          //transform
          hammertime.options.drag="false";
}

И добавление его обратно при завершении преобразования

 hammertime.on("transformend", function(evt) {
          //transformend
          hammertime.options.drag="true";
 }

Этот подход работает отлично, за исключением того, что сопротивление не возвращается к true. Я хочу 100% рабочего раствора. Пожалуйста, помогите...

4b9b3361

Ответ 1

Один дешевый способ сделать это: чтобы ваши обработчики событий взаимодействовали:

var transforming = false;
hammertime.on("transformstart", function (ev) { transforming = true; ... });
hammertime.on("transformend", function (ev) { transforming = false; });
hammertime.on("drag", function (ev) { if (!transforming) { ... } });

Если Hammer не всегда вызывает ваш transformend, то, к сожалению, все, что вы можете сделать, чтобы обойти ошибку, это использовать какой-то таймер, который заканчивает ваше преобразование, если пройдет определенное количество времени. Это не идеально, но это может помочь вам оправиться от возможной ошибки в Hammer:

var transformTimer = undefined,
    transforming = false;
hammertime.on("transform", function (ev) {
    transforming = true;
    if (transformTimer !== undefined) clearTimeout(transformTimer);
    transformTimer = setTimeout(function () {
        transformTimer = undefined;
        transforming = false;
    }, 1000); // end the transform after 1s of idle time.

    // your transform code goes here
});
hammertime.on("transformend", function () {
    if (transformTimer !== undefined) {
        clearTimeout(transformTimer);
        transformTimer = undefined;
    }
    transforming = false;
});
hammertime.on("drag", function (ev) { if (!transforming) { ... } });

Ответ 3

Мне только удалось исправить эту ошибку.

            var transforming = false;
            var transformTimer = null;          

            hammertime2.on('touch drag dragend transform', function(ev) {
                manageMultitouch(ev);
            });

            hammertime2.on("transformstart", function(evt) {                    
                transforming = true;
            });

            hammertime2.on("transformend", function(evt) {
                setTimeout(function () {       
                    transforming = false;
                }, 1000);
            });

        function manageMultitouch(ev){              

            if (transforming && (ev.type == 'drag' || ev.type =='dragend') ) return;

            switch(ev.type) {
                case 'touch':                      
                    break;

                case 'drag':
                    break;

                case 'transform':
                    transforming = true;                       
                    break;

                case 'dragend':
                    break;
            } 

        }

Важная часть здесь заключается в том, что, когда вы делаете "Transform", всегда устанавливайте transforming = true;