2013-07-21 1 views
2

Мне интересно, что является лучшим способом для настройки моей конфигурации hammer.js на простой документ, над которым я работаю. Вот мой код:Правильный способ запускать() в событиях jquery hammer

var tappableArea = $('.content'); 
var touchableArea = $('.sidebar'); 

function reloadHammerGestures() { 
    tappableArea.hammer().off("doubletap"); 
    touchableArea.hammer().off("swipeleft swiperight"); 
    hammerGestures(); 
} 

function hammerGestures() { 
    tappableArea.hammer().off("doubletap"); 
    touchableArea.hammer().off("swipeleft swiperight"); 

    if (fullScreenMode()) { 
    touchableArea.hammer().on("swipeleft swiperight", function(event) { 
     alert("swiped!"); 
    }); 

    else if (!fullScreenMode()) { 
    tappableArea.hammer().on("doubletap", function(event) { 
     alert("tapped"); 
    }); 
    } 
} 

$(document).ready(function() { 
hammerGestures(); 
}); 

$(window).resize(function() { 
    reloadHammerGesture();; 
}); 

И функция и загружается на $(document).ready() и (window).resize(), так вот почему я делаю .off() в начале .. мне интересно, что это неправильный метод на получение его выключенным в случае условных изменений экранного режима, если вы можете помочь мне в улучшении этого кода, я буду очень рад.

уход тейк и имеют хороший день :)

+0

Было бы хорошо, чтобы увидеть разницу между tappableArea и touchableArea и узнать, почему они не могут сосуществовать с их молотом поведения. – Ringo

+0

только два div, и единственная причина, по которой я хочу отключить это поведение hammer.js, - это настройка макета. Простым способом, после изменения размера окна, я не хочу развязывать все обработчики событий молотка и повторно инициализировать функцию hammerGestures(). – user1854236

+0

Код, который у вас есть, выглядит ОК. Я не думаю, что кто-то может помочь вам с большими проблемами или шаблонами дизайна, если вы не предоставите больше информации. «Настройка макета» не дает мне достаточно информации о том, почему вы должны отключить поведение и повторно применить их. Просто потому, что вы изменяете размер окна, это не значит, что вам нужно повторно применять поведение. Можете ли вы поместить свой код в jsfiddle или хотя бы разместить здесь HTML. – Ringo

ответ

1

Ну вы можете сделать это:

touchableArea.hammer().off().on(...) 

Или $(touchableArea).unbind() вероятно, будет работать.

Или сделать так:

$('#touchableDiv, #tappableDiv').unbind() 

ТАКЖЕ: Я вижу на GitHub, что кто-то добавил метод hammer.destroy().

ТАКЖЕ СМОТРИТЕ: Removing hammer events

+0

Yeap, так как я вижу, что это очень конкретная ситуация, я использую версию jquery, поэтому hammer.destroy() не существует, и единственный способ - объявить все события, которые я хочу отменить (используя .off()). – user1854236

Смежные вопросы