> ## Documentation Index
> Fetch the complete documentation index at: https://docs.landerlab.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Popup API: управление попапами через llPopupsApi

> Открывайте, закрывайте и переключайте попапы LanderLab из кнопок и своего кода через JavaScript API window.llPopupsApi, указывая ID попапа.

Popup API позволяет управлять любым попапом из кода, а не полагаться только на встроенные триггеры (загрузка страницы, задержка, прокрутка, exit intent). Вызывайте `window.llPopupsApi` из элемента Custom Code или любого скрипта, чтобы открыть попап по кнопке, закрыть его после отправки формы или встроить попапы в свои интеграции.

<Note>
  **Используйте ID попапа, а не его название.** Всё в API адресует попап по его `id`. **Название** попапа (понятная метка, которую вы видите в редакторе) — это только метаданные для аналитики и отображения, по нему адресация никогда не работает. Если указать название, ничего не произойдёт.
</Note>

## Шаг 1. Подготовьте попап

Прежде чем управлять попапом из кода, настройте его так, чтобы он не конфликтовал с триггерами, и узнайте ID, на который можно ссылаться.

<Steps>
  <Step title="Установите триггер Manual">
    На вкладке **Popup** в правой панели выберите для **Trigger** значение **Manual** (только по кнопке). Попап никогда не откроется автоматически — он появится только тогда, когда его откроет ваша ссылка или скрипт.

    <Tip>
      Вам не обязательно использовать Manual. API работает с любым попапом независимо от его триггера. Manual лишь гарантирует, что попап останется закрытым, пока вы не откроете его сами.
    </Tip>
  </Step>

  <Step title="Скопируйте ID попапа">
    У каждого попапа уже есть уникальный ID. Чтобы его найти, откройте панель **Popups** в левой боковой панели, нажмите **три точки (actions)** рядом с нужным попапом и выберите **Copy ID**. Вставляйте это значение везде, где API требует ID попапа.

    <Frame>
      <img src="https://mintcdn.com/landerlab-babdc23f/fgP40icRWa6qGg0H/images/image-35.png?fit=max&auto=format&n=fgP40icRWa6qGg0H&q=85&s=f28dda295445ca5b6f2491081455ef51" alt="Пункт Copy ID в меню действий панели Popups" width="599" height="575" data-path="images/image-35.png" />
    </Frame>
  </Step>
</Steps>

## JavaScript API (`window.llPopupsApi`)

Вызывайте глобальный объект `window.llPopupsApi`, чтобы открыть, закрыть или переключить попап — по своему событию, после подходящей задержки или из другого скрипта. Добавьте код в элемент **Custom Code** на вашей странице.

```javascript theme={null}
// Открыть конкретный попап
window.llPopupsApi.open('promo-popup-id');
```

### Адресация: ID необязателен

У каждого метода есть **необязательный** аргумент — ID попапа:

* **ID передан** → действие касается этого попапа.
* **ID пропущен** → действие касается **всех попапов** на странице.

```javascript theme={null}
window.llPopupsApi.close('promo-popup-id'); // закрыть один попап
window.llPopupsApi.close();              // закрыть все попапы на странице
```

### Методы

| Метод | Что делает |
| - | - |
| `open(id?)` | Принудительно открывает попап. Открывает его снова, даже если посетитель ранее закрыл его в этой сессии (ваш явный вызов имеет приоритет). |
| `close(id?)` | Закрывает попап с анимацией. **Не** устанавливает cookie «stay dismissed» — попап может сработать снова. |
| `dismiss(id?)` | Закрывает попап **и** блокирует его: устанавливает cookie на 30 дней, если включен **Stay Dismissed**, или флаг сессии, если включен **Show Once**. Именно это делает встроенная кнопка закрытия. |
| `toggle(id?)` | Открывает попап, если он закрыт, и закрывает, если открыт. (Открытие через toggle работает принудительно, как `open`.) |
| `get(id?)` | Возвращает HTML-элемент попапа, если передан ID (или `null`, если попап не найден), или массив всех элементов попапов, если ID пропущен. |

<Note>
  **`close` и `dismiss`.** `close()` — временное закрытие: автотриггеры, например exit intent, могут сработать снова. `dismiss()` — закрытие навсегда для сессии (и до 30 дней при включённом **Stay Dismissed**). Используйте `close()` для сценария «может, позже», а `dismiss()` — для «больше не показывать».
</Note>

### Примеры

<CodeGroup>
  ```javascript Открытие по кнопке theme={null}
  // Дождитесь загрузки страницы, прежде чем подключать обработчики.
  // DOMContentLoaded гарантирует, что и ваша кнопка, и llPopupsApi уже существуют.
  document.addEventListener('DOMContentLoaded', function () {
    const button = document.getElementById('my-button');

    button.addEventListener('click', function () {
      window.llPopupsApi.open('promo-popup-id');
    });
  });
  ```

  ```javascript Закрытие с задержкой theme={null}
  // Автоматически закрыть попап через 5 секунд после открытия
  window.llPopupsApi.open('promo-popup-id');
  setTimeout(function () {
    window.llPopupsApi.close('promo-popup-id');
  }, 5000);
  ```

  ```javascript Toggle и закрытие всех theme={null}
  // Переключить один попап
  window.llPopupsApi.toggle('promo-popup-id');

  // Закрыть все попапы на странице сразу
  window.llPopupsApi.close();
  ```

  ```javascript Получение элемента попапа theme={null}
  // Передайте ID, чтобы получить один элемент (или null, если не найден)
  const popup = window.llPopupsApi.get('promo-popup-id');

  // Пропустите ID, чтобы получить массив всех попапов на странице
  const allPopups = window.llPopupsApi.get();
  ```
</CodeGroup>

## Что стоит знать

* **Выполняйте код после загрузки страницы.** `window.llPopupsApi` появляется только после загрузки скрипта попапов. Оборачивайте вызовы в обработчик `DOMContentLoaded` — как в примере **Открытие по кнопке** выше, — чтобы API был доступен к моменту вызова.
* **Режим предпросмотра.** В URL предпросмотра cookie Stay Dismissed и флаг Show Once никогда не читаются и не записываются, поэтому во время тестирования попап появляется всегда.
* **Закрытие по ESC.** Если для попапа включено **Close on ESC**, нажатие <kbd>Esc</kbd> закрывает верхний открытый попап — код не нужен.
* **Открытие важнее закрытия навсегда.** Вызов `open()` снова открывает попап, даже если посетитель его закрыл навсегда, но собственные автотриггеры попапа по-прежнему учитывают это закрытие. Если нужно снова заблокировать показ, вызовите `dismiss()`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.