mmenujs: примите меры после открытия панели

#javascript #mmenu

Вопрос:

Я хотел бы предпринять действие после открытия данной панели, например:

 sidebar.API.openPanel(document.querySelector("#panel"))
  .then(function)
 

Документация предоставляет метод привязки к действию:

 sidebar.API.bind("openPanel:finish", function(panel){
  function()
}
 

Но тогда это делается навсегда. Я хочу сделать это только один раз, и метода «отменить привязку» не существует. Есть ли какой-нибудь способ сделать это?

Ответ №1:

Вы можете использовать переменную, область действия которой находится вне .bind функции, установить ее в true значение внутри функции и добавить проверку выполнения кода, только если указанная переменная false

 let isOpened = false
sidebar.API.bind("openPanel:finish", function(panel){
  if(isOpened === false){ isOpened = true }
  else return

  function(){ // Here is your code that will execute only once }
}
 

Комментарии:

1. Спасибо. Проблема в том, что привязка по — прежнему постоянна и «подключена» — поэтому даже после того, как isOpened установлен в значение true, он все равно будет выполнять функцию на открытой панели, он просто не будет повторно выполнять привязку.

2. Я предположил, что это было только для одной панели. Возможно, вам потребуется сохранить массив или объект логических значений вместо одной переменной, если их несколько, и аналогичным образом обновить их

3. Я бы хотел, чтобы это работало только для одной панели, но проблема повторяется и здесь — предложение if фильтрует только при установке привязки, а не при ее выполнении — какова бы ни была функция, как только привязка установлена, эта функция будет выполняться каждый раз, когда срабатывает «openPanel:готово» .