Правильный способ set off() в событиях jquery Hammer

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

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() в начале. Мне интересно, что это неправильный метод отключения при изменении условного режима экрана, если вы можете мне помочь в улучшении этого кода, я буду очень рад.

берегите себя и хорошего дня :)


person user1854236    schedule 21.07.2013    source источник
comment
Было бы неплохо увидеть разницу между tappableArea и touchableArea и узнать, почему они не могут сосуществовать с поведением молотка.   -  person Ringo    schedule 21.07.2013
comment
всего два div, и единственная причина, по которой я хочу отключить это поведение Hammer.js, — это настройка макета. Проще говоря, после изменения размера окна я не хочу отвязывать все обработчики событий молота и повторно инициализировать функцию HammerGestures().   -  person user1854236    schedule 21.07.2013
comment
Код у вас выглядит нормально. Я не думаю, что кто-то может помочь вам с более серьезными проблемами или шаблонами проектирования, если вы не предоставите больше информации. Настройка макета не дает мне достаточно информации о том, почему вы должны отключить поведение и повторно применить его. То, что вы изменяете размер окна, не означает, что вам нужно повторно применять поведение. Можете ли вы поместить свой код в jsfiddle или хотя бы опубликовать HTML здесь.   -  person Ringo    schedule 21.07.2013
comment
Когда fullScreenMode имеет значение True, я просто не хочу скрывать свои панели навигации при двойном нажатии, потому что в этом режиме достаточно места для их отображения. Поэтому я хотел отключить это поведение, потому что, когда у меня есть hammerGestures() только на document.ready(), когда пользователь меняет область просмотра, условные выражения не работают. другой — телефон), и взгляды совсем другие. Я не знаю, как объяснить этот более простой способ, я обновил код выше :)   -  person user1854236    schedule 21.07.2013
comment
Итак, более простым способом. Было бы здорово, если бы я мог отвязать все события молотка в функции reloadHammerGestures() в одну строку, возможно ли это?   -  person user1854236    schedule 21.07.2013


Ответы (1)


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

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

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

Или сделать оба:

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

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

ТАКЖЕ СМОТРИТЕ: Удаление событий молотка

person Ringo    schedule 21.07.2013
comment
Да, как я вижу, это очень специфическая ситуация, я использую версию jquery, поэтому Hammer.destroy() не существует, и единственный способ - объявить все события, которые я хочу отменить (используя .off()). - person user1854236; 22.07.2013