Поскольку вы уже используете jQuery, одним из вариантов является присоединение слушателей с помощью .on
, что позволяет вам удалить их всех с помощью .off
без необходимости сохранять ссылку на них:
$.fn.onSwipe = function(handlers) { // adding a jQuery prototype.
$(this).on('touchmove', function(event) {
handleSwipe(event, handlers.left, handlers.right, handlers.up, handlers.down);
});
};
$.fn.offSwipe = function() {
$(this).off('touchmove');
};
Если к тому же элементу могут быть подключены другие слушатели touchmove
, вам нужно будет сохранить ссылку на созданную функцию при вызове. Без использования jQuery (кроме части $.fn
):
const handlersByElement = new Map();
$.fn.onSwipe = function(handlers) { // adding a jQuery prototype.
const handler = function(event) {
handleSwipe(event, handlers.left, handlers.right, handlers.up, handlers.down);
};
for (const elm of this) {
handlersByElement.set(elm, handler);
elm.addEventListener('touchmove', handler);
}
};
$.fn.offSwipe = function() {
for (const elm of this) {
handlersByElement.set(elm, handler);
elm.removeEventListener('touchmove', handlersByElement.get(elm));
}
};
Вы также можете использовать пространства имен событий с jQuery, чтобы упростить добавление и удаление событий без необходимости сохранить ссылку на них и не удаляя все события этого типа, спасибо @VLAZ:
$.fn.onSwipe = function(handlers) { // adding a jQuery prototype.
$(this).on('touchmove.myswiper', function(event) {
handleSwipe(event, handlers.left, handlers.right, handlers.up, handlers.down);
});
};
$.fn.offSwipe = function() {
$(this).off('touchmove.myswiper');
};