(function($) {
$.fn.clickToggle = function(func1, func2) {
var funcs = [func1, func2];
this.data('toggleclicked', 0);
this.click(function() {
var data = $(this).data();
var tc = data.toggleclicked;
$.proxy(funcs[tc], this)();
data.toggleclicked = (tc + 1) % 2;
});
return this;
};
}(jQuery));
$(document).ready(function(){
$('#touch-menu').clickToggle(function(){$('#mobileMenu').modal('show'); $('#touch-menu').addClass('open')},function(){$('#mobileMenu').modal('hide'); $('#touch-menu').removeClass('open')});
});
Вот пример кода, .clickToggle можно рассматривать как .toggle(). Идея какая. Есть бургер меню, при клике на него "тоглятся" две функции: 1. открывает модальное окно и добавляет класс к бургер меню. 2. закрывает модальное окно и убирает класс с бургер меню.
При нажатии на ссылку меню мы прокручиваемся до таргета, но это меню должно и закрыться сразу же (то есть должна вы полниться функция 2 в том тоггле выше. Делаю я это обычно: если нажали на ссылку, то переезжаем до таргета и закрываем модальное окно + убираем класс open у бургера.
НО функция .clickToggle "не знает об этом" и считает что меню бургер по-прежнему открыто, то есть она, при клике будет выполнять функцию 2 (а она уже у нас выполнена), из-за этого чтобы еще раз открыть меню приходится два раза кликать на бургер.
Вопрос такой: можно ли как-то "сказать" что если мы нажали на ссылку, модалка закралась, бургер вернулся в первоначальное положение и .clickToggle начал работать заново?