Вступление #

Чтобы создать выпадающее меню, к триггеру необходимо добавить класс .js-dropdown-trigger и атрибут data-dropdown-menu с указанием id выпадающего меню.

Выпадающее меню реализовано на базе Headless Tippy.

Установка #

Пример разметки и инициализации выпадающего меню.

    <button
		class="my-dropdown-trigger js-dropdown-trigger"
		type="button"
		data-dropdown-menu="my-dropdown-menu"
	>
		Вызвать выпадающее меню
	</button>

	<div
		id="my-dropdown-menu"
		class="dropdown-menu"
	>
        <nav>
            <a href="">Брутали́зм</a>
            <a href="">Деконструктиви́зм</a>
            <a href="">Архитектурный модернизм</a>
        </nav>
    </div>
	// настройки Headless Tippy(https://atomiks.github.io/tippyjs/v6/all-props/)
	const options = {
		'trigger': 'mouseenter focus',
		'placement': 'top',
	};

    BasicDropdown.init('.my-dropdown-trigger', options);
    BasicDropdown.init(document.querySelector('.my-dropdown-trigger'), options);
    BasicDropdown.init(document.querySelectorAll('.my-dropdown-trigger'), options);

    // или

    BasicDropdown.init(); // по умолчанию инициaлизирует элементы с классом .js-dropdown-trigger и с дата-атрибутом data-dropdown-options

Конфигурация #

Настройки, заданные с использованием data-атрибутов.

data-dropdown-options #

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

	<button
		class="my-dropdown-trigger js-dropdown-trigger"
		type="button"
		data-dropdown-menu="my-dropdown-menu"
		data-dropdown-options='{"trigger": "mouseenter focus", "placement": "top"}'
	>
		Вызвать выпадающий список
	</button>

	<div
		id="my-dropdown-menu"
		class="dropdown-menu"
	>
		<nav>
			<a href="">Брутали́зм</a>
			<a href="">Деконструктиви́зм</a>
			<a href="">Архитектурный модернизм</a>
		</nav>
	</div>

Методы #

show() #

Показывает выпадающее меню.

    // принимает значение типа Object или String
    // в значениях указывается триггер выпадающего меню
    BasicDropdown.show('.my-dropdown-trigger');

hide() #

Скрывает выпадающее меню.

    // принимает значение типа Object или String
    // в значениях указывается триггер выпадающего меню
    BasicDropdown.hide('.my-dropdown-trigger');

Экземпляр #

У каждого инициализированного элемента есть свой экземпляр.

	const myDropdownTrigger = document.querySelector(".my-dropdown-trigger")

	console.log(myDropdownTrigger.BasicDropdown) // пример экземпляра

В настоящее время экземпляр поддерживает все методы.

Прослушивание событий #

Можно прослушать события элемента и получить необходимые параметры.

dropdown:change #

Срабатывает при переключении видимости выпадающего меню.

Параметры:

Название Тип Описание
event.detail.trigger object Триггер выпадающего меню.
event.detail.menu object Выпадающее меню.
event.detail.show boolean Статус видимости меню(виден: true, скрыт: false).
	const myDropdownTrigger = document.querySelector('.my-dropdown-trigger');

	// Событие навешивается на триггер выпадающего меню.
	myDropdownTrigger.addEventListener('dropdown:change', function(event) {

		console.log(event.detail); // параметры

    }, false);